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