課堂上老師布置了一個作業,如下圖所示:
就是簡單寫一個借書系統。
大概想了一下流程,登錄——>驗證登錄信息——>登錄成功跳轉借書界面——>可查看自己的借閱書籍以及數量。。。
登錄可以很快實現,但借書界面里的數據怎么來呢?
不可能百度搜索書籍信息,然后一條一條來復制粘貼吧
所以,我想到了Python。
思路:通過Python爬取指定某讀數平台,然后將解析的數據直接存到數據庫。
打開開發者工具,我們可以很快鎖定所要爬取的信息;
學過jQuery解析庫的,可以發現用pyquery庫選擇對應class屬性,可以很快獲取到需要的信息;
拿到數據后,使用pymysql將數據存入數據庫,需要提前創建好數據庫和表噢,當然也可以用代碼實現;
↓
因為該讀數平台的書籍信息是動態加載,所以一次可以爬20條,但可以通過循環index,來獲取多條數據。或者,也可以通過selenium庫來實現網頁加載自動化,從而拿到所有數據。
# -*- coding=utf-8 -*-
from pyquery import PyQuery
import requests
import pymysql
header = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
"AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36"
}
# 獲取html源碼
def getUrl(url):
re = requests.get(url, headers=header)
return re
# 獲取數據並清洗
def getData(html):
doc = PyQuery(html)
name = doc(".wr_bookList_item_title")
author = doc(".wr_bookList_item_author a")
percent = doc(".wr_bookList_item_reading_percent")
desc = doc(".wr_bookList_item_desc")
lists = []
for i in range(len(name)):
try:
li = [name[i].text, author[i].text, percent[i].text, desc[i].text]
except Exception as e:
li = [name[i].text, author[i].text, "null", desc[i].text]
lists.append(li)
return lists
# 連接數據庫,存取數據
def saveDate(lists):
db = pymysql.connect(
host='127.0.0.1',
port=3306,
user='root',
password='zhy123',
database='mybooks',
charset='utf8'
)
cursor = db.cursor()
for num in lists:
sql = "insert into books_copy1(title,author,percent,prec) " \
"VALUES ('%s','%s','%s','%s')" % (num[0], num[1], num[2], num[3])
try:
cursor.execute(sql)
db.commit()
except Exception as e:
print(e)
db.rollback()
print("保存成功!!!")
def main():
url = 'https://weread.qq.com/web/category/700002'
html = getUrl(url).content.decode('utf-8')
lists = getData(html)
# print(lists)
saveDate(lists)
if __name__ == '__main__':
main()
注意了,直接復制此代碼運行,是會報錯的喔!
需要確定自己電腦是否已經安裝了mysql,其次修改代碼里的用戶名和密碼,最后是數據庫和表的名稱喔。
我的簡單借書小系統⁄(⁄ ⁄•⁄ω⁄•⁄ ⁄)⁄
登錄界面:
借書界面:
我的借書界面:
前端界面有些馬虎了,湊合湊合O(∩_∩)O~
那就這樣吧 byebye~~~