1. 程式人生 > 其它 >Python簡單爬取圖書資訊及入庫

Python簡單爬取圖書資訊及入庫

為了完成課堂作業~~~

課堂上老師佈置了一個作業,如下圖所示:


就是簡單寫一個借書系統。

大概想了一下流程,登入——>驗證登入資訊——>登入成功跳轉借書介面——>可檢視自己的借閱書籍以及數量。。。

登入可以很快實現,但借書介面裡的資料怎麼來呢?

不可能百度搜索書籍資訊,然後一條一條來複制貼上吧

所以,我想到了Python。

思路:通過Python爬取指定某讀數平臺,然後將解析的資料直接存到資料庫。

URL:https://weread.qq.com/

開啟開發者工具,我們可以很快鎖定所要爬取的資訊;

學過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~~~

Collection:因為這些東西是非常簡單的。不要抱怨自己學不會,那是因為你沒有足夠用心。