之前準備做圖書館管理系統,就需要一些書作為圖書資訊,是以就是用了Python爬取了2019年暢銷圖書排行榜,網址是:http://www.bookschina.com/24hour/1_0_1/ 一共是34頁,總共1000條資料。
為了保證是圖書館管理系統的需要,是以資料庫進行了特殊的設計,下圖是資料庫的結構圖,資料庫使用的是mysql。
- 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确定小區域,儲存到一個清單當中,在資料庫連結的時候周遊即可。
學習心得:
- 連接配接資料庫這是一個比較難的過程,花費的時間也比較多,有了這些資料之後,就要繼續寫JavaWeb的圖書管理系統了,有了書的資料,做的也會更加出色。
- 在導入資料庫的時候,’%s’的使用是真的學到了,原本清單輸出的是一個BS中的一個資料類型,通過了%s,就可以儲存下來了。
- zip複習了,之前一直不明白如何做到多個清單一起進行操作,一直也再找理由不去看,今天使用的時候算是好好看了一遍。