日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

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

發布時間:2025/7/25 HTML 56 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DC学院爬虫学习笔记(六):浏览器抓包及headers设置 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

爬蟲的一般思路:

  • 抓取網頁、分析請求
  • 解析網頁、尋找數據
  • 儲存數據、多頁處理 -

分析具體網頁請求:

1. 觀察以下網址翻頁后的URL:

http://www.zkh360.com/zkh_catalog/3.html

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

2. 使用谷歌瀏覽器分析網頁的真實請求

  • 谷歌瀏覽器——檢查——Network
  • 首先清空請求列表,點擊下一頁(第2頁)
  • 在請求列表里查找真實的請求,可發現包含商品信息的真實請求為: http://www.zkh360.com/Product/SearchProduct?catalogueId=3&pageIndex=2&pageSize=20

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

  • 以下是第2、3、4頁的請求,通過對比可以發現網站是通過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不發生變化的網站的數據一般都是通過Ajax或者JavaScript加載的,可以在過濾器的XHR或者JS中找到真實請求

3. 尋找真實請求的三個步驟

  • 分析:使用谷歌瀏覽器開發者工具分析網頁的請求
  • 測試:測試URL請求中每個參數的作用,找出控制翻頁等功能的參數
  • 重復:多次重復尋找符合爬蟲需要的真實請求

實戰:爬取知乎

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

1. 尋找真實請求的測試

  • 首先,進入“輪子哥——vczh”關注的人的頁面(注意:需要先登錄個人知乎賬號)
  • 通過禁止JavaScript加載的方法發現頁面不能正常加載,確認該頁面的翻頁是通過JavaScript加載數據實現的
  • 使用谷歌瀏覽器開發者工具尋找包含關注人信息的真實請求,可以發現真實請求是以“followees”開頭的請求,其返回一個JSON格式的數據,該數據對應下一頁的“他關注的人”:
  • 雙擊這個請求,返回一個JSON格式的數據,可以通過安裝JSONView插件在瀏覽器中更好地顯示該數據
  • 接下來便可以嘗試爬取該請求的數據

2. 嘗試爬取真實請求的數據

  • 首先使用requests.get()嘗試爬取數據
# -*- 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>
  • 可以發現返回了“500 Server Error”,即由于網站反爬蟲的原因,服務器返回了“500服務錯誤”
  • 該問題可以通過添加hearders請求頭信息解決

3. 添加hearders請求頭信息模擬瀏覽器訪問

  • 請求頭信息承載了關于客戶端瀏覽器、請求頁面、服務器等相關的信息,用來告知服務器發起請求的客戶端的具體信息
  • 知乎的反爬蟲機制是通過核對請求頭信息實現的,所以需要在使用requests請求數據的時候加上所需的請求頭
  • 對比知乎的請求頭信息和常見的請求頭信息,發現知乎請求頭多了authorization和X-UDID的信息

  • 在爬蟲程序中添加請求頭信息,即添加headers

# -*- coding:utf-8 -*-import requestsheaders = {'authorization':'Bearer 2|1:0|10:1519311205|4:z_c0|92:Mi4xeVFXVEF3QUFBQUFBVUd2WmJrTXJEU2NBQUFDRUFsVk5aV2EyV2dBdzY2cTlRY0JHTkc0TkpMalZwOXBkRkowby13|d5a54e1ffbdf3097b4c79eb2dbf297e9c6b55971566d830ce33f8852601375ee ', #括號中填上你的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',#括號中填上你的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)

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

  • 運行程序,成功返回數據

4. 使用pandas把數據保存入庫

  • pandas DataFrame的from_dict()方法可以很方便地把爬取到的數據保存為DataFrame格式的結構化數據
import pandas as pd response= requests.get(url, headers = headers).json()['data'] #添加上['data']是因為關注人的信息是保存在data下面的,只需要這一部分的數據df = pd.DataFrame.from_dict(response) df.to_csv('user.csv')

5. 定義函數實現翻頁爬取

  • 定義一個get_user_data()函數,實現翻頁爬取功能,并添加上爬取時間間隔以免由于爬取太頻繁給服務器造成負擔
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數據添加進user_dataprint('正在爬取第%s頁' % str(i+1))time.sleep(1) #設置爬取網頁的時間間隔為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,成功解決

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。