天天看点

Python使用requests、BeautifulSoup库爬取图书信息,使用Pymysql导入数据库

之前准备做图书馆管理系统,就需要一些书作为图书信息,所以就是用了Python爬取了2019年畅销图书排行榜,网址是:http://www.bookschina.com/24hour/1_0_1/ 一共是34页,总共1000条数据。

为了保证是图书馆管理系统的需要,所以数据库进行了特殊的设计,下图是数据库的结构图,数据库使用的是mysql。

Python使用requests、BeautifulSoup库爬取图书信息,使用Pymysql导入数据库
  • bookid是图书的索书号,使用了字符和数字组合而成,在Python里我做了一些特殊的处理,这个不是爬虫爬进去了,而是自己编写的代码。
  • bookname,author,price,note为别是爬取的相关数据。
  • borrow、appoint、renew分别代表着是否借出、是否预约、是否续借等,这个由于是我们最新的图书,一律赋值为0。

先附上所有的代码:

import pymysql    #导入pymysql模块 这里面模块名称可以小写
import requests
from bs4 import BeautifulSoup

acs = 65

for j in range(1,35):

    res=requests.get("http://www.bookschina.com/24hour/1_0_"+str(j)+"/")
    soup = BeautifulSoup(res.text,"html.parser")

    list1=soup.find(attrs={"class":"bookList"})

    name=list1.findAll(attrs={"class":"name"})
    author=list1.findAll(attrs={"class":"author"})
    price=list1.findAll(attrs={"class":"sellPrice"})
    note=list1.findAll(attrs={"class":"publisher"})

    db = pymysql.connect(host='localhost', user='root', passwd='sa', db='test', port=3306, charset='utf8')

    for i,na,au,p,no in zip(range(1,101),name,author,price,note):
        you = db.cursor()  # 用cursor方法获取一个操作游标you

        strid = chr(acs) + str(i)

        sql = "INSERT INTO book(bookid,bookname,author,price,note,borrow,appoint,renew) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')" % (strid,na.string,au.string,p.string,no.string,0,0,0)
        you.execute(sql)    #用execute方法执行

    acs = acs + 1
    if acs == 91 :
        acs = 97

you.close()#关闭操作游标
db.close()#释放数据库资源
           

数据库连接方面:

import pymysql    #导入pymysql模块 这里面模块名称可以小写
db = pymysql.connect(host='localhost', user='root', passwd='sa', db='test', port=3306, charset='utf8')
sql = "INSERT INTO book(bookid,bookname,author,price,note,borrow,appoint,renew) VALUES ('%s','%s','%s','%s','%s','%d','%d','%d')" % (strid,na.string,au.string,p.string,no.string,0,0,0)
you.execute(sql)    #用execute方法执行
you.close()#关闭操作游标
db.close()#释放数据库资源
           

这些基本上如果学过JDBC就应该知道如何套用这个模板了,这里port大部分默认都是3306。

sql语句还是和mysql中的语句一样,没有不同。

execute即可执行所有的语句,这里十分方便。

爬虫的实现:

由于图书有34页的总共信息,所有外面的循环,设置的range(1,35),不断换取新的网址,然后通过find确定大取余,findAll确定小区域,保存到一个列表当中,在数据库链接的时候遍历即可。

学习心得:

  1. 连接数据库这是一个比较难的过程,花费的时间也比较多,有了这些数据之后,就要继续写JavaWeb的图书管理系统了,有了书的数据,做的也会更加出色。
  2. 在导入数据库的时候,’%s’的使用是真的学到了,原本列表输出的是一个BS中的一个数据类型,通过了%s,就可以保存下来了。
  3. zip复习了,之前一直不明白如何做到多个列表一起进行操作,一直也再找理由不去看,今天使用的时候算是好好看了一遍。