【python爬蟲】爬取當當網TOP500圖書暢銷榜


爬蟲是現代通過互聯網獲取數據的很重要的一種方法,我相信它在后續工作學習中也能夠發揮一定用處。

之前已經學過一些爬蟲基本知識,接下來開始記錄一下個人在爬蟲學習過程中的一些思路與解決辦法。

 

一、目標

 

這次要爬取的網頁是當當網TOP500圖書暢銷榜,這個網頁收納了當當網上近30日最暢銷的500本書籍,每頁展示20本,一共25頁。

要爬取的數據,就是每本書籍的標題、評論數、作者、售價等信息。

 

二、分析網頁

1)找到傳輸數據的連接

按 F12 打開 Chrome 瀏覽器的檢查窗口,刷新頁面。

點擊查看發現,XHR 異步加載這部分是空白。而在 ALL 這部分里,按照 Size 降序排列,排在最前的是一個 Document 類型的傳輸,並且傳輸時間持續較長。

(這里有一個小竅門,不管網頁上的內容是通過什么樣的方式傳輸,我們想要爬取的數據往往是從數據傳輸的主體中提取。而數據主體的流量使用是較大的)

推測,頁面的主要內容是通過這個來傳輸的。

 

接下來查看這個 Document 類型傳輸的返回值 Response,大致瀏覽一下能夠發現,要爬取的數據於其中明文傳輸。

所以,可以確定,訪問這個連接就可以拿到我們想要的數據。

 

 2)該連接的傳輸方式

查看這個 Document 類型傳輸的 Headers,我們可以從中得出瀏覽器發出連接請求時所用的關鍵信息。

 

可以看出,這個連接的 URL 是 http://bang.dangdang.com/books/bestsellers/01.54.00.00.00.00-recent30-0-0-1-1,請求方式是 GET。

所以,我們可以使用 requests 包,構建一個 GET 類型的請求,並且使用 User-Agent 將爬蟲偽裝成瀏覽器進行請求。

 

 3)翻頁邏輯

不要關閉檢查窗口,在網頁上點擊按鈕翻到第2頁。可以看到窗口中出現了一個新的 Document 類型的連接,不同之處在於末尾的數字變成了2。

重復上述操作1和2,可以發現我們要抓取的第二頁的數據,都來自於這個新的 Document 類型連接,並且傳輸格式大體一致。

其中第二頁對應連接的 URL 是 http://bang.dangdang.com/books/bestsellers/01.54.00.00.00.00-recent30-0-0-1-2。

隨便翻了幾頁查看 URL,找到規律:第 N 頁對應的 URL 地址是 http://bang.dangdang.com/books/bestsellers/01.54.00.00.00.00-recent30-0-0-1-N。

所以,我們可以通過更改 URL 結尾的數字實現翻頁,其中 N 取值范圍是 [1, 25]。

 

4)提取元素

在1)中,我們已經找到了,書籍對應的信息都在 Document 類型的連接中可以找到。接下來的問題是,如何從 Document 返回的信息中提取每本書籍對應的信息。

我們要找的是每本書籍對應的信息位置,以第一本書為例。把鼠標移至網頁上這本書附近,右鍵選擇【檢查】,可以看到在檢查窗口中的 Elements 部分已經定位到了第一本書的信息。

上下移動鼠標,可以發現,<ul class="bang_list clearfix bang_list_mode">包含的是頁面上所有書籍的信息,其中同一本書籍的信息都包含在一個 <li> 中,不同書籍的信息對應不同的 <li> 之中。

所以,我們可以使用 BeautifulSoup 這個模塊,把想要的信息提取出來,另行保存。

 

三、總結

當當網TOP500圖書暢銷榜這個頁面沒有什么明顯的反爬措施,數據也是直接通過 HTML 進行傳輸,沒有使用異步加載等方式傳輸,也沒有經過 JS 加密處理。

只需要熟悉基本的爬蟲操作步驟就可以爬取數據,難度低適合新人練習。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM