DC学院爬虫学习笔记(六):浏览器抓包及headers设置
生活随笔
收集整理的這篇文章主要介紹了
DC学院爬虫学习笔记(六):浏览器抓包及headers设置
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
爬蟲的一般思路:
- 抓取網頁、分析請求
- 解析網頁、尋找數據
- 儲存數據、多頁處理 -
分析具體網頁請求:
1. 觀察以下網址翻頁后的URL:
http://www.zkh360.com/zkh_catalog/3.html可以看到,有些網址翻頁后URL是不變的,那該怎么爬取,請看下文。
2. 使用谷歌瀏覽器分析網頁的真實請求
- 谷歌瀏覽器——檢查——Network
- 首先清空請求列表,點擊下一頁(第2頁)
- 在請求列表里查找真實的請求,可發(fā)現包含商品信息的真實請求為: http://www.zkh360.com/Product/SearchProduct?catalogueId=3&pageIndex=2&pageSize=20
箭頭所指的地方就是真實請求
-
以下是第2、3、4頁的請求,通過對比可以發(fā)現網站是通過pageIndex參數控制翻頁的,并且pageSize參數刪去之后并不會對請求產生影響
- 第2頁:http://www.zkh360.com/Product/SearchProduct?catalogueId=3&pageIndex=2&pageSize=20
- 第3頁:http://www.zkh360.com/Product/SearchProduct?catalogueId=3&pageIndex=3&pageSize=20
- 第4頁:http://www.zkh360.com/Product/SearchProduct?catalogueId=3&pageIndex=4&pageSize=20
- 有關參數的信息可以在Hearders的Query String Parameters里查找到
- 翻頁后URL不發(fā)生變化的網站的數據一般都是通過Ajax或者JavaScript加載的,可以在過濾器的XHR或者JS中找到真實請求
3. 尋找真實請求的三個步驟
- 分析:使用谷歌瀏覽器開發(fā)者工具分析網頁的請求
- 測試:測試URL請求中每個參數的作用,找出控制翻頁等功能的參數
- 重復:多次重復尋找符合爬蟲需要的真實請求
實戰(zhàn):爬取知乎
通過爬取知乎“輪子哥”——vczh關注的人分析Ajax或者JavaScript加載的數據的真實請求并展示這種爬取方法的具體過程。
1. 尋找真實請求的測試
- 首先,進入“輪子哥——vczh”關注的人的頁面(注意:需要先登錄個人知乎賬號)
- 通過禁止JavaScript加載的方法發(fā)現頁面不能正常加載,確認該頁面的翻頁是通過JavaScript加載數據實現的
- 使用谷歌瀏覽器開發(fā)者工具尋找包含關注人信息的真實請求,可以發(fā)現真實請求是以“followees”開頭的請求,其返回一個JSON格式的數據,該數據對應下一頁的“他關注的人”:
- 雙擊這個請求,返回一個JSON格式的數據,可以通過安裝JSONView插件在瀏覽器中更好地顯示該數據
- 接下來便可以嘗試爬取該請求的數據
2. 嘗試爬取真實請求的數據
- 首先使用requests.get()嘗試爬取數據
- 可以發(fā)現返回了“500 Server Error”,即由于網站反爬蟲的原因,服務器返回了“500服務錯誤”
- 該問題可以通過添加hearders請求頭信息解決
3. 添加hearders請求頭信息模擬瀏覽器訪問
- 請求頭信息承載了關于客戶端瀏覽器、請求頁面、服務器等相關的信息,用來告知服務器發(fā)起請求的客戶端的具體信息
- 知乎的反爬蟲機制是通過核對請求頭信息實現的,所以需要在使用requests請求數據的時候加上所需的請求頭
- 對比知乎的請求頭信息和常見的請求頭信息,發(fā)現知乎請求頭多了authorization和X-UDID的信息
- 在爬蟲程序中添加請求頭信息,即添加headers
注:剛才寫的時候出問題了,說是User-Agent問題,查了半天,發(fā)現是在最前面多了個空格。。
- 運行程序,成功返回數據
4. 使用pandas把數據保存入庫
- pandas DataFrame的from_dict()方法可以很方便地把爬取到的數據保存為DataFrame格式的結構化數據
5. 定義函數實現翻頁爬取
- 定義一個get_user_data()函數,實現翻頁爬取功能,并添加上爬取時間間隔以免由于爬取太頻繁給服務器造成負擔
ok,成功解決
總結
以上是生活随笔為你收集整理的DC学院爬虫学习笔记(六):浏览器抓包及headers设置的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python学习笔记 - 用VSCode
- 下一篇: Ubuntu台式机如何用usb无线网卡共