【Python3網絡爬蟲開發實戰】6-Ajax數據爬取-2-Ajax分析方法

這裏還之前面的微博爲例,咱們知道拖動刷新的內容由Ajax加載,並且頁面的URL沒有變化,那麼應該到哪裏去查看這些Ajax請求呢?html

1. 查看請求

這裏還須要藉助瀏覽器的開發者工具,下面以Chrome瀏覽器爲例來介紹。瀏覽器

首先,用Chrome瀏覽器打開微博的連接m.weibo.cn/u/283067847…,隨後在頁面中點擊鼠標右鍵,從彈出的快捷菜單中選擇「檢查」選項,此時便會彈出開發者工具,如圖6-2所示:服務器

圖6-2 開發者工具微信

此時在Elements選項卡中便會觀察到網頁的源代碼,右側即是節點的樣式。網絡

不過這不是咱們想要尋找的內容。切換到Network選項卡,隨後從新刷新頁面,能夠發現這裏出現了很是多的條目,如圖6-3所示。工具

圖6-3 Network面板結果ui

前面也提到過,這裏其實就是在頁面加載過程當中瀏覽器與服務器之間發送請求和接收響應的全部記錄。3d

Ajax其實有其特殊的請求類型,它叫做xhr。在圖6-3中,咱們能夠發現一個名稱以getIndex開頭的請求,其Type爲xhr,這就是一個Ajax請求。用鼠標點擊這個請求,能夠查看這個請求的詳細信息,如圖6-4所示。code

圖6-4 詳細信息cdn

在右側能夠觀察到其Request Headers、URL和Response Headers等信息。其中Request Headers中有一個信息爲X-Requested-With:XMLHttpRequest,這就標記了此請求是Ajax請求,如圖6-5所示。

圖6-5 詳細信息

隨後點擊一下Preview,便可看到響應的內容,它是JSON格式的。這裏Chrome爲咱們自動作了解析,點擊箭頭便可展開和收起相應內容,如圖6-6所示。

圖6-6 JSON結果

觀察能夠發現,這裏的返回結果是個人我的信息,如暱稱、簡介、頭像等,這也是用來渲染我的主頁所使用的數據。JavaScript接收到這些數據以後,再執行相應的渲染方法,整個頁面就渲染出來了。

另外,也能夠切換到Response選項卡,從中觀察到真實的返回數據,如圖6-7所示。

圖6-7 Response內容

接下來,切回到第一個請求,觀察一下它的Response是什麼,如圖6-8所示。

圖6-8 Response內容

這是最原始的連接m.weibo.cn/u/283067847…返回的結果,其代碼只有不到50行,結構也很是簡單,只是執行了一些JavaScript。

因此說,咱們看到的微博頁面的真實數據並非最原始的頁面返回的,而是後來執行JavaScript後再次向後臺發送了Ajax請求,瀏覽器拿到數據後再進一步渲染出來的。

2. 過濾請求

接下來,再利用Chrome開發者工具的篩選功能篩選出全部的Ajax請求。在請求的上方有一層篩選欄,直接點擊XHR,此時在下方顯示的全部請求便都是Ajax請求了,如圖6-9所示。

圖6-9 Ajax請求

接下來,不斷滑動頁面,能夠看到頁面底部有一條條新的微博被刷出,而開發者工具下方也一個個地出現Ajax請求,這樣咱們就能夠捕獲到全部的Ajax請求了。

隨意點開一個條目,均可以清楚地看到其Request URL、Request Headers、Response Headers、Response Body等內容,此時想要模擬請求和提取就很是簡單了。

圖6-10所示的內容即是個人某一頁微博的列表信息。

圖6-10 微博列表信息

到如今爲止,咱們已經能夠分析出來Ajax請求的一些詳細信息了,接下來只須要用程序模擬這些Ajax請求,就能夠輕鬆提取咱們所須要的信息了。

在下一節中,咱們用Python實現Ajax請求的模擬,從而實現數據的抓取。


本資源首發於崔慶才的我的博客靜覓: Python3網絡爬蟲開發實戰教程 | 靜覓

如想了解更多爬蟲資訊,請關注個人我的微信公衆號:進擊的Coder

weixin.qq.com/r/5zsjOyvEZ… (二維碼自動識別)

相關文章
相關標籤/搜索