數據頭User-Agent反爬蟲機制解析:
當我們使用瀏覽器訪問網站的時候,瀏覽器會發送一小段信息給網站,我們稱為Request Headers,在這個頭部信息里面包含了本次訪問的一些信息,例如編碼方式,當前地址,將要訪問的地址等等。這些信息一般來說是不必要的,但是現在很多網站會把這些信息利用起來。其中最常被用到的一個信息,叫做“User-Agent”。網站可以通過User-Agent來判斷用戶是使用什么瀏覽器訪問。不同瀏覽器的User-Agent是不一樣的,但都有遵循一定的規則。
但是如果我們使用 Python 的 Requests 直接訪問網站,除了網址不提供其他的信息,那么網站收到的User-Agent是空。這個時候網站就知道我們不是使用瀏覽器訪問的,於是它就可以拒絕我們的訪問。
如何獲取網站的 User-Agent 呢?
請打開 Chrome,任意打開一個網站,然后右鍵,“檢查” 打開開發者工具,定位到 “Network” 選項卡,並刷新網頁,如下圖所示:
在左下角會出現當前網頁加載的所有元素。隨便點一個元素,於是在右下角會出現對當前元素的請求信息。在里面找到Request Headers這一項,里面的內容即為我們需要的內容。
host 提供了主機名及端口號
Accept 告訴服務器能夠發送哪些媒體類型
Accept-Charset 告訴服務器能夠發送哪些字符集
Accept-Encoding 告訴服務器能夠發送哪些編碼方式(最常見的是utf-8)
Accept-Language 告訴服務器能夠發送哪些語言
Cache-control 這個字段用於指定所有緩存機制在整個請求/響應鏈中必須服從的指令
User agent 發送請求的應用程序名(一些網站會根據UA訪問的頻率間隔時間進行反爬)
cookie 特定的標記信息,一般可以直接復制,對於一些變化的可以選擇構造(有關cookie的內容將在另一篇博文中進行詳細介紹)
不同的網站,Request Headers 是不同的
提示:post方法,session模塊的get方法,以及Session模塊的get方法,post方法,都支持自定義Headers,參數名為headers,他可以接收字典作為參數。我們可以通過字典來設定Headers,例如:
所以,檢查User-Agent是一種最簡單的反爬蟲機制,而通過設定Request Headers中的User-Agent,可以突破這種機制。
除此之外呢,下面介紹一個python下非常好用的偽裝請求頭的庫:fake-useragent,具體使用說明如下:
安裝fake-useragent庫
pip install fake-useragent
獲取各瀏覽器的fake-useragent
1 from fake_useragent import UserAgent 2 ua = UserAgent() 3 #ie瀏覽器的user agent
4 print(ua.ie) 5
6 #opera瀏覽器
7 print(ua.opera) 8
9 #chrome瀏覽器
10 print(ua.chrome) 11
12 #firefox瀏覽器
13 print(ua.firefox) 14
15 #safri瀏覽器
16 print(ua.safari) 17
18 #最常用的方式
19 #寫爬蟲最實用的是可以隨意變換headers,一定要有隨機性。支持隨機生成請求頭
20 print(ua.random) 21 print(ua.random) 22 print(ua.random)
示例代碼
1 from fake_useragent import UserAgent 2 import requests 3 ua=UserAgent() 4 #請求的網址
5 url="http://www.baidu.com"
6 #請求頭
7 headers={"User-Agent":ua.random} 8 #請求網址
9 response=requests.get(url=url,headers=headers) 10 #響應體內容
11 print(response.text) 12 #響應狀態信息
13 print(response.status_code) 14 #響應頭信息
15 print(response.headers)
原文:https://blog.csdn.net/qq_29186489/article/details/78496747