1. 程式人生 > >Python之簡單抓取豆瓣讀書資訊

Python之簡單抓取豆瓣讀書資訊

最近出差學習,閒來擼一把 Python。看語法書這些,真是看完就忘,還不如來寫點小程式,有實踐性又有趣。

我的環境是Ubuntu 17,開始之前先裝幾個依賴包,用於解析 html 檔案。

sudo apt install python-lxml,python-requests

小程式實現從豆瓣讀書上抓取評分8以上,且評分人數不低於800人的書籍。這裡取了一個種子,是劉震雲老師的《一句頂一萬句》。

from lxml import html
import requests

urlPrefix = 'https://book.douban.com/subject/'
candidateBookNums = []
candidateBookNums.append('3633461'
) selectedBooks = {} # 控制迴圈次數 # i = 1 while candidateBookNums: bookNum = candidateBookNums.pop(0) bookUrl = urlPrefix + str(bookNum) # 獲取網頁 page = requests.get(bookUrl) # 將網頁格式化為樹型 tree = html.fromstring(page.text) # 書籍名稱 bookName = tree.xpath('//title/text()') # 平均分
rating_num = tree.xpath('//strong[@property="v:average"]/text()')[0] # 評分人數 rating_people = tree.xpath('//a/span[@property="v:votes"]/text()')[0] if rating_num < 8 or rating_people < 800: continue stars = tree.xpath('//span[@class="rating_per"]/text()') # 5星評價比例 stars5 = stars[0
] # 4星評價比例 stars4 = stars[1] # 3星評價比例 stars3 = stars[2] # 2星評價比例 stars2 = stars[3] # 1星評價比例 stars1 = stars[4] # 豆瓣讀書中指向其他書的連結 links = tree.xpath('//div[@class="content clearfix"]/dl/dd/a/@href') # 去掉空白符,如回車、換行、空格、縮排 bookName = bookName[0].strip() # 整理豆瓣上書籍的評分資訊 book = { 'name':bookName, 'score':rating_num, 'rating_people':rating_people, 'stars5':stars5, 'stars4':stars4, 'stars3':stars3, 'stars2':stars2, 'stars1':stars1, } selectedBooks[bookNum] = book print bookName,book for j in links: bookNum = j.split('/')[-2] if bookNum not in selectedBooks.keys() and bookNum not in candidateBookNums: candidateBookNums.append(bookNum) # i += 1 # if i > 100: # break print selectedBooks

OK,這樣就完成了一個簡單的從豆瓣抓取符合要求的書籍的程式。其實實現倒是次要的,主要是從豆瓣讀書的頁面程式碼中找到相應資訊的位置,提取之。