requests庫實戰-爬取豆瓣top250的圖書

日拱一卒|數據挖掘012

推文對應的代碼鏈接:https://github.com/piyixiaeco/daily-code/blob/master/requests-douban%20book%20Top250.ipynb

參照“手把手教你爬豆瓣Top250的電影”,本篇推送將爬取豆瓣Top250圖書,練習requests庫的使用。

整體思路:

  1. 得到豆瓣Top250圖書的所有網頁鏈接
  2. 從每個網頁中獲取源代碼內容
  3. 提取網頁中符合要求的數據
  4. 將三個函數整合成一個函數

一、得到所有網址鏈接

第一頁網址:
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電影數據進行分析

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章