日拱一卒|數據挖掘012
推文對應的代碼鏈接:https://github.com/piyixiaeco/daily-code/blob/master/requests-douban%20book%20Top250.ipynb
參照“手把手教你爬豆瓣Top250的電影”,本篇推送將爬取豆瓣Top250圖書,練習requests庫的使用。
整體思路:
- 得到豆瓣Top250圖書的所有網頁鏈接
- 從每個網頁中獲取源代碼內容
- 提取網頁中符合要求的數據
- 將三個函數整合成一個函數
一、得到所有網址鏈接
第一頁網址:
https://book.douban.com/top250?start=
第二頁網址:
https://book.douban.com/top250?start=25
第三頁網址:
https://book.douban.com/top250?start=50
從中我們可以發現網址鏈接規律:
只有start=後面的數字會發生變化,而且是有規律地變化,規律爲25x(i-1),其中i爲當前的頁碼
將爬取相應網頁鏈接的函數命名爲allurl()
,具體如下:
二、從每個網頁中獲取源代碼內容
首先通過requests.get()的方法得到關於本次請求的返回包,並放在r這個變量中。通過r的屬性r.status_code或者r.reason,獲取本次請求的狀態
我們可以看到返回的狀態碼是200,OK,說明我們可以順利地訪問這個網頁。
爲了保證運行時的穩定性,加入try和except。如果try部分的代碼運行正常,則在執行完畢後不會執行except內的內容,如果出現各種類型的ERROR,則會執行except下代碼,而不會因爲報錯而終止程序的運行。
三、 提取網頁中符合要求的數據
對於r.text源碼有兩種通常的處理方法,一種是使用html解析引擎解析,如BeautifulSoup,一種是使用正則表達式匹配文本。
正則表達式的優勢在於不需要知道這個源代碼結構,只需要找到相關信息前後的唯一標籤即可,方便了操作。
通過Chrome瀏覽器檢查選項
可知:圖書的名稱都保存在title="..."\n這個標籤中
同理得到評分和評價人數
然而這並不是最終想要的結果,還需要剔除掉尖括號和其中的內容,保留我們所需的信息。
將信息儲存到字典中
通過pandas中的DataFrame構建一個表格型數據結構
將這些步驟封裝成一個函數
四、 將三個函數整合成一個函數
將三個函數整合成一個函數(main(filename))
首先創建一個同類型的空的DataFrame名爲all,以便在後續的循環添加內容
對每個網頁都通過gethtmltext(url)的方法得到源代碼,對每個源代碼都通過getbookinfo(url)的方法獲得frame。
最後將爬取下來的數據寫入到Excel進行保存
將以上的整合有:
爬取豆瓣圖書Top250任務大功告成~
參考資料:
手把手教你爬豆瓣Top250的電影
手把手教你爬豆瓣Top250的電影(二)
使用python抓取豆瓣top250電影數據進行分析