為什么要進行瀏覽器偽裝技術?
? 有一些網站為了避免爬蟲的惡意訪問,會設置一些反爬蟲機制,對方服務器會對爬蟲進行屏蔽。常見的飯爬蟲機制主要有下面幾個:
1.? 通過分析用戶請求的Headers信息進行反爬蟲
2.? 通過檢測用戶行為進行反爬蟲,比如通過判斷同一個IP在短時間內是否頻繁訪問對應網站等進行分析
3.? 通過動態頁面增加爬蟲的爬取難度,達到反爬蟲的目的
??? 第一種反爬蟲機制在目前網站中應用的最多,大部分反爬蟲網站會對用戶請求的Headers信息的“User-Agent”字段進行檢測來判斷身份,有時,這類反爬蟲的網站還會對“Referer”字段進行檢測。我們可以在爬蟲中構造這些用戶請求的Headers信息,以此將爬蟲偽裝成瀏覽器,簡單的偽裝只需設置好“User-Agent”字段的信息即可,如果要進行高相似度的路藍旗偽裝,則需要將用戶請求的Headers信息中常見的字段都在爬蟲中設置好
?第二種反爬蟲機制的網站,可以通過之前學習的使用代理服務器并經常切換代理服務器的方式,一般就能夠攻克限制
?第三種反爬蟲機制的網站,可以利用一些工具軟件,比如selenium+phantomJS,就可以攻克限制
瀏覽器偽裝準備工作
? 在學習高相似度的瀏覽器偽裝技術之前,我們首先要對Headers信息要有一定的了解。我們先打開火狐瀏覽器,打開淘寶的網站www.taobao.com,利用Fiddler獲取頭部信息。
字段的格式,基本格式為:“字段名”:”字段值”,字段名和對應的值之間通過”:”隔開。
字段1: Accept: text/html, application/xhtml+xml, application/xmlq=0.9,*/*;q=08
- Accept字段主要用來表示瀏覽器能夠支持的內容類型有哪些。
- text html表示HTML文檔。
- application/ xhtml+xml表示XHTML文檔。
- q代表權重系數,值介于0和1之間。
這一行字段信息表示瀏覽器可以支持 text/html,application/xml、/等內容類型,支持的優先順序從左到右依次排列。
字段2: accept-encoding:gzip, deflate
- accept-encoding字段主要用來表示瀏覽器支持的壓縮編碼有哪些。
- gzip是壓縮編碼的一種。
- deflate是一種無損數據壓縮算法
這一行字段信息表示瀏覽器可以支持gzp、 deflate等壓縮編碼。
字段3: Accept- Language:en-US,en;q=0.5
- Accept-language主要用來表示瀏覽器所支持的語言類型。
- en-Us表示英語(美國)語言
- en表示英語語言
所以之一行字段表示瀏覽器可以支持en-US、cn等語言。除此之外,有些還支持zh-CN(表示簡體中文語言。zh表示中文,CN表示簡體)。
字段4:User- Agent: Mozilla/5.0( X11;Ubuntu;Linux x86_64 ;rv:61.0) Gecko20100101Firefox/61.0
- user-agent字段主要表示用戶代理,服務器可以通過該字段識別出客戶端的瀏覽器類客戶端的操作系統及版本號型、瀏覽器版本號主要以偽造該字段進行網頁排版引擎等客戶端信息。所以之前要模擬瀏覽器登錄,主要以偽造該字段進行。
- Mozilla/5.0表示瀏覽器名和版本號。
- X11;Ubuntu;Linux x86_64 ;rv:61.0表示客戶端操作系統對應信息。
- Gecko表示網頁排版引擎對應信息。
- Firefox/61.0表示火狐瀏覽器。
所以這一行字段表示信息為對應的用戶代理信息。
字段5: Connection:keep-alve
- Connection表示客戶端與服務器的連接類型,對應的字段值主要有兩種。
- keep-alive表示持久性連接。
- close表示單方面關閉連接,讓連接斷開。
所以此時,這一行字段表示客戶端與服務器的連接是持久性連接。
?
字段6:Host: ocsp2.globalsign.com
- Host字段表示請求的服務器網址是什么,此時這一行字段表示請求的服務器網址是ocsp2.globalsign.com。
字段7: Referer:網址
- Referer字段主要表示來源網址地址,比如我們從htp:/ www,youku.conm網址中訪問了該網址下的子頁http/tvyouku.com?spm=0.0.topnav.5-1-3!2-A.Onqoef,那么此時來源網址為htp:/ www,youku,con,即此時 Referer字段的值為http:/ww
youku. com
python代碼實戰
使用代理服務器
import urllib.request
import urllib.parse
import http.cookiejar
url = "http://bbs.chinaunix.net/member.php?mod=logging&action=login&loginsubmit=yes&loginhash=LfgTz"
postdata = urllib.parse.urlencode({ # 此處登錄可用自己在網站上注冊的用戶名和密碼"username": "weisuen","password": "aA123456"
}).encode("utf-8")
req = urllib.request.Request(url, postdata)
req.add_header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36")# 使用http.cookiejar.CookieJar()創建CookieJar對象
cjar = http.cookiejar.CookieJar()# 使用HTTPCookieProcessor創建cookie處理器,并以其參數構建opener對象
opener = urllib.request.build_opener(urllib.request.HTTPCookieProcessor(cjar))
# 將opener安裝為全局urllib.request.install_opener(opener)
file = opener.open(req)
data = file.read()
file = open('/home/wk/csdn.html','wb')
file.write(data)
file.close()url2 = "http://bbs.chinaunix.net/" # 設置要爬取的該網站下其他網頁地址
data2 = urllib.request.urlopen(url2).read()
fhandle = open('/home/wk/csdn1.html','wb')
fhandle.write(data2)
fhandle.close()
?
?
?
?
?
?
?
?