天天看點

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複習了,之前一直不明白如何做到多個清單一起進行操作,一直也再找理由不去看,今天使用的時候算是好好看了一遍。