日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

DC学院爬虫学习笔记(六):浏览器抓包及headers设置

發(fā)布時(shí)間:2025/7/25 HTML 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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ù)
# -*- coding:utf-8 -*-import requestsurl = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=20&limit=20' response = requests.get(url).textprint(response) <html><body><h1>500 Server Error</h1> An internal server error occured. </body></html>
  • 可以發(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

# -*- coding:utf-8 -*-import requestsheaders = {'authorization':'Bearer 2|1:0|10:1519311205|4:z_c0|92:Mi4xeVFXVEF3QUFBQUFBVUd2WmJrTXJEU2NBQUFDRUFsVk5aV2EyV2dBdzY2cTlRY0JHTkc0TkpMalZwOXBkRkowby13|d5a54e1ffbdf3097b4c79eb2dbf297e9c6b55971566d830ce33f8852601375ee ', #括號(hào)中填上你的authorization'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.119 Safari/537.36',#括號(hào)中填上你的User-Agent } url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset=20&limit=20' response= requests.get(url, headers = headers).json()##print(response)

:剛才寫的時(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ù)
import pandas as pd response= requests.get(url, headers = headers).json()['data'] #添加上['data']是因?yàn)殛P(guān)注人的信息是保存在data下面的,只需要這一部分的數(shù)據(jù)df = pd.DataFrame.from_dict(response) df.to_csv('user.csv')

5. 定義函數(shù)實(shí)現(xiàn)翻頁爬取

  • 定義一個(gè)get_user_data()函數(shù),實(shí)現(xiàn)翻頁爬取功能,并添加上爬取時(shí)間間隔以免由于爬取太頻繁給服務(wù)器造成負(fù)擔(dān)
import time user_data = [] def get_user_data(page):for i in range(page):url = 'https://www.zhihu.com/api/v4/members/excited-vczh/followees?include=data%5B*%5D.answer_count%2Carticles_count%2Cgender%2Cfollower_count%2Cis_followed%2Cis_following%2Cbadge%5B%3F(type%3Dbest_answerer)%5D.topics&offset={}&limit=20'.format(i*20)response = requests.get(url, headers=headers).json()['data']user_data.extend(response) #把response數(shù)據(jù)添加進(jìn)user_dataprint('正在爬取第%s頁' % str(i+1))time.sleep(1) #設(shè)置爬取網(wǎng)頁的時(shí)間間隔為1秒if __name__ == '__main__':get_user_data(10)df = pd.DataFrame.from_dict(user_data)df.to_csv('users2.csv') 正在爬取第1頁 正在爬取第2頁 正在爬取第3頁 正在爬取第4頁 正在爬取第5頁 正在爬取第6頁 正在爬取第7頁 正在爬取第8頁 正在爬取第9頁 正在爬取第10頁

ok,成功解決

總結(jié)

以上是生活随笔為你收集整理的DC学院爬虫学习笔记(六):浏览器抓包及headers设置的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。