天天看點

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

抓取網頁、分析請求

解析網頁、尋找資料

儲存資料、多頁處理 -

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎
DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

可以看到,有些網址翻頁後URL是不變的,那該怎麼爬取,請看下文。

谷歌浏覽器——檢查——Network

首先清空請求清單,點選下一頁(第2頁)

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

箭頭所指的地方就是真實請求

以下是第2、3、4頁的請求,通過對比可以發現網站是通過pageIndex參數控制翻頁的,并且pageSize參數删去之後并不會對請求産生影響

有關參數的資訊可以在Hearders的Query String Parameters裡查找到

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

翻頁後URL不發生變化的網站的資料一般都是通過Ajax或者JavaScript加載的,可以在過濾器的XHR或者JS中找到真實請求

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

分析:使用谷歌浏覽器開發者工具分析網頁的請求

測試:測試URL請求中每個參數的作用,找出控制翻頁等功能的參數

重複:多次重複尋找符合爬蟲需要的真實請求

通過爬取知乎“輪子哥”——vczh關注的人分析Ajax或者JavaScript加載的資料的真實請求并展示這種爬取方法的具體過程。

首先,進入“輪子哥——vczh”關注的人的頁面(注意:需要先登入個人知乎賬号)

通過禁止JavaScript加載的方法發現頁面不能正常加載,确認該頁面的翻頁是通過JavaScript加載資料實作的

使用谷歌浏覽器開發者工具尋找包含關注人資訊的真實請求,可以發現真實請求是以“followees”開頭的請求,其傳回一個JSON格式的資料,該資料對應下一頁的“他關注的人”:

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

接下來便可以嘗試爬取該請求的資料

首先使用requests.get()嘗試爬取資料

可以發現傳回了“500 Server Error”,即由于網站反爬蟲的原因,伺服器傳回了“500服務錯誤”

該問題可以通過添加hearders請求頭資訊解決

請求頭資訊承載了關于用戶端浏覽器、請求頁面、伺服器等相關的資訊,用來告知伺服器發起請求的用戶端的具體資訊

知乎的反爬蟲機制是通過核對請求頭資訊實作的,是以需要在使用requests請求資料的時候加上所需的請求頭

對比知乎的請求頭資訊和常見的請求頭資訊,發現知乎請求頭多了authorization和X-UDID的資訊

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

在爬蟲程式中添加請求頭資訊,即添加headers

DC學院爬蟲學習筆記(六):浏覽器抓包及headers設定爬蟲的一般思路:分析具體網頁請求:實戰:爬取知乎

注:剛才寫的時候出問題了,說是User-Agent問題,查了半天,發現是在最前面多了個空格。。

運作程式,成功傳回資料

pandas DataFrame的from_dict()方法可以很友善地把爬取到的資料儲存為DataFrame格式的結構化資料

定義一個get_user_data()函數,實作翻頁爬取功能,并添加上爬取時間間隔以免由于爬取太頻繁給伺服器造成負擔

ok,成功解決