Python之簡單抓取豆瓣讀書資訊
阿新 • • 發佈:2018-11-19
最近出差學習,閒來擼一把 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,這樣就完成了一個簡單的從豆瓣抓取符合要求的書籍的程式。其實實現倒是次要的,主要是從豆瓣讀書的頁面程式碼中找到相應資訊的位置,提取之。