1. 程式人生 > 實用技巧 >Python網路爬蟲(瀏覽器偽裝技術)

Python網路爬蟲(瀏覽器偽裝技術)

歡迎關注公眾號:Python爬蟲資料分析挖掘,回覆【開源原始碼】免費獲取更多開源專案原始碼

01 頭資訊欄位格式

基本格式:”欄位名:欄位值“

02 常見頭資訊欄位含義

1)欄位1: Accept: text/html,application/xhtml+xml,application/xml; q=0.9,/; q=0.8

  • Accept欄位主要用來表示瀏覽器能夠支援的內容型別有哪些

  • text/html表示HTML文件

  • application/xhtml+xml表示XHTML文件

  • application/xml表示XML文件

  • 代表權重係數,值介於0和1之間

這一行欄位的資訊表示瀏覽器可以支援text/html,application/xhtml+xml,application/xml,/

等內容型別,支援的優先順序從左到右依次排列。

2)欄位2:Accept-Encoding: gzip, deflate

  • Accept-Encoding欄位主要用來表示瀏覽器支援的壓縮編碼有哪些

  • gzip是壓縮編碼的一種
    deflate是一種無損資料壓縮演算法

這一行欄位的資訊表示瀏覽器可以支援gzip,deflate等壓縮編碼。

3)欄位3:Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3

  • Accept-Language欄位主要用來表示瀏覽器支援的語言型別

  • zh-CN表示簡體中文語言,zh表示中文,CN表示簡體

  • en-US表示英文(美國)語言

  • en表示英語語言

這一行欄位的資訊表示瀏覽器可以支援zh-CN,zh,en-US,en等語言。

4)欄位4:User-Agent:Mozilla/5.0 (Windows NT 6.1; WOW64;rv:47.0) Gecko/20100101Firefox/47.0

  • User-Agent欄位主要表示使用者代理,伺服器可以通過該欄位識別出客戶端的瀏覽器型別,瀏覽器版本號,客戶端的作業系統及版本號,網頁排版引擎等客戶端資訊

  • Mozilla/5.0表示瀏覽器名及版本資訊

  • Windows NT 6.1; WOW64; rv:47.0表示客戶端作業系統對應資訊

  • Gecko表示網頁排版引擎對應資訊

  • firefox自然表示火狐瀏覽器

這一行欄位的資訊表示為對應的使用者代理資訊是Mozilla/5.0 (Windows NT 6.1; WOW64;rv:47.0) Gecko/20100101Firefox/47.0。

5)欄位5:Connection:keep-alive

  • Connection表示客戶端與伺服器的連線型別,對應的欄位值主要有倆種:
    keep-alive表示永續性連線
    close表示單方面關閉連線,讓連線斷開

這一行欄位的資訊表示客戶端與伺服器的連線是永續性連線。

6)欄位6:Host:www.baidu.com

  • Host欄位表示請求的伺服器網址是什麼

5)欄位7:Referer:網址

  • Referer欄位主要表示來源網址地址

03 實戰

import urllib.request
import http.cookiejar
url= "http://xx.xx.com/xxx/xxx.html"
#以字典的形式設定headers
headers={ "Accept":" text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
          "Accept-Language":" zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3",
          "User-Agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.122 Safari/537.36 SE 2.X MetaSr 1.0",
          "Connection": "keep-alive",
          "referer":"http://xx.xx.com/"}
# 設定cookie
cjar=http.cookiejar.CookieJar()
proxy= urllib.request.ProxyHandler({'http':"127.0.0.1:8888"})  
opener = urllib.request.build_opener(proxy, urllib.request.HTTPHandler,urllib.request.HTTPCookieProcessor(cjar))
# 建立空列表,以指定格式儲存頭資訊
headall=[]
# 通過for迴圈遍歷字典,構造出指定格式的headers資訊
for key,value in headers.items():
    item=(key,value)
    headall.append(item)
# 將指定格式的headers資訊新增號
opener.addheaders = headall
# 將opener安裝為全域性
urllib.request.install_opener(opener)
data=urllib.request.urlopen(url).read()
fhandle=open("./6.html","wb")
fhandle.write(data)
fhandle.close()

注意:

  • 如果Accept-Encoding設定為gzip,deflate,有可能會出現亂碼問題,此時只需要將該欄位資訊省略不寫或者將該欄位資訊的值設定為utf-8或gb2312即可。

  • 使用Fiddler作為代理伺服器,所爬取的網址要以具體檔案或者“/”結尾。

  • referer欄位的值一般可以設定為要爬取的網頁的域名地址或對應網站的主頁網址。