欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python爬蟲 urllib模塊反爬蟲機制UA詳解

 更新時間:2019年08月20日 09:35:07   作者:minger_lcm  
這篇文章主要介紹了python爬蟲 urllib模塊反爬蟲機制UA詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

方法: 使用urlencode函數(shù)

urllib.request.urlopen()

import urllib.request
import urllib.parse
url = 'https://www.sogou.com/web?'
#將get請求中url攜帶的參數(shù)封裝至字典中
param = {
  'query':'周杰倫'
}
#對url中的非ascii進行編碼
param = urllib.parse.urlencode(param)
#將編碼后的數(shù)據(jù)值拼接回url中
url += param 
response = urllib.request.urlopen(url=url)
data = response.read()
with open('./周杰倫1.html','wb') as fp:
  fp.write(data)
print('寫入文件完畢')

開發(fā)者工具瀏覽器按F12或者右鍵按檢查 ,有個抓包工具network,刷新頁面,可以看到網(wǎng)頁資源,可以看到請求頭信息,UA

在抓包工具點擊任意請求,可以看到所有請求信息,向應(yīng)信息,

主要用到headers,response,response headers存放響應(yīng)頭信息,request headers 存放請求信息

反爬出機制:網(wǎng)站會檢查請求的UA,如果發(fā)現(xiàn)UA是爬蟲程序,會拒絕提供網(wǎng)站頁面數(shù)據(jù)。

如果網(wǎng)站檢查發(fā)現(xiàn)請求UA是基于某一款瀏覽器標(biāo)識(瀏覽器發(fā)起的請求),網(wǎng)站會認為請求是正常請求,會把頁面數(shù)據(jù)響應(yīng)信息給客戶端

User-Agent(UA):請求載體的身份標(biāo)識

反反爬蟲機制:

偽造爬蟲程序的請求的UA,把爬蟲程序的請求UA偽造成谷歌標(biāo)識,火狐標(biāo)識

通過自定義請求對象,用于偽裝爬蟲程序請求的身份。

User-Agent參數(shù),簡稱為UA,該參數(shù)的作用是用于表明本次請求載體的身份標(biāo)識。如果我們通過瀏覽器發(fā)起的請求,則該請求的載體為當(dāng)前瀏覽器,則UA參數(shù)的值表明的是當(dāng)前瀏覽器的身份標(biāo)識表示的一串?dāng)?shù)據(jù)。

如果我們使用爬蟲程序發(fā)起的一個請求,則該請求的載體為爬蟲程序,那么該請求的UA為爬蟲程序的身份標(biāo)識表示的一串?dāng)?shù)據(jù)。

有些網(wǎng)站會通過辨別請求的UA來判別該請求的載體是否為爬蟲程序,如果為爬蟲程序,則不會給該請求返回響應(yīng),那么我們的爬蟲程序則也無法通過請求爬取到該網(wǎng)站中的數(shù)據(jù)值,這也是反爬蟲的一種初級技術(shù)手段。那么為了防止該問題的出現(xiàn),則我們可以給爬蟲程序的UA進行偽裝,偽裝成某款瀏覽器的身份標(biāo)識。

上述案例中,我們是通過request模塊中的urlopen發(fā)起的請求,該請求對象為urllib中內(nèi)置的默認請求對象,我們無法對其進行UA進行更改操作。urllib還為我們提供了一種自定義請求對象的方式,我們可以通過自定義請求對象的方式,給該請求對象中的UA進行偽裝(更改)操作。

自定義請求頭信息字典可以添加谷歌瀏覽器的UA標(biāo)識,自定義請求對象來偽裝成谷歌UA

1.封裝自定義的請求頭信息的字典,

2.注意:在headers字典中可以封裝任意的請求頭信息

3.將瀏覽器的UA數(shù)據(jù)獲取,封裝到一個字典中。該UA值可以通過抓包工具或者瀏覽器自帶的開發(fā)者工具中獲取某請求,
從中獲取UA的值

import urllib.request
import urllib.parse
url = 'https://www.sogou.com/web?query='
# url的特性:url不可以存在非ASCII編碼字符數(shù)據(jù)
word = urllib.parse.quote("周杰倫")
# 將編碼后的數(shù)據(jù)值拼接回url中
url = url+word # 有效url
# 發(fā)請求之前對請求的UA進行偽造,偽造完再對請求url發(fā)起請求
# UA偽造
# 1 子制定一個請求對象,headers是請求頭信息,字典形式
# 封裝自定義的請求頭信息的字典,
# 注意:在headers字典中可以封裝任意的請求頭信息
headers = {
  # 存儲任意的請求頭信息
  'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'
}
# 該請求對象的UA進行了成功的偽裝
request = urllib.request.Request(url=url, headers=headers)
# 2.針對自定義請求對象發(fā)起請求
response = urllib.request.urlopen(request)
# 3.獲取響應(yīng)對象中的頁面數(shù)據(jù):read函數(shù)可以獲取響應(yīng)對象中存儲的頁面數(shù)據(jù)(byte類型的數(shù)據(jù)值)
page_text = response.read()
# 4.持久化存儲:將爬取的頁面數(shù)據(jù)寫入文件進行保存
with open("周杰倫.html","wb") as f:
  f.write(page_text)
print("寫入數(shù)據(jù)成功")

這樣就可以突破網(wǎng)站的反爬機制

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python實例練習(xí)水仙花數(shù)問題講解

    Python實例練習(xí)水仙花數(shù)問題講解

    這篇文章介紹了Python找水仙花數(shù)從分析到實現(xiàn)的過程,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • python迭代器常見用法實例分析

    python迭代器常見用法實例分析

    這篇文章主要介紹了python迭代器常見用法,結(jié)合實例形式分析了Python迭代器概念、功能、常見操作方法及相關(guān)注意事項,需要的朋友可以參考下
    2019-11-11
  • 使用Pytest.main()運行時參數(shù)不生效問題解決

    使用Pytest.main()運行時參數(shù)不生效問題解決

    本文主要介紹了使用Pytest.main()運行時參數(shù)不生效問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-02-02
  • tensorflow模型繼續(xù)訓(xùn)練 fineturn實例

    tensorflow模型繼續(xù)訓(xùn)練 fineturn實例

    今天小編就為大家分享一篇tensorflow模型繼續(xù)訓(xùn)練 fineturn實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-01-01
  • Python?隊列Queue和PriorityQueue解析

    Python?隊列Queue和PriorityQueue解析

    這篇文章主要介紹了Python?隊列Queue和PriorityQueue,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • pandas 中對特征進行硬編碼和onehot編碼的實現(xiàn)

    pandas 中對特征進行硬編碼和onehot編碼的實現(xiàn)

    今天小編就為大家分享一篇pandas 中對特征進行硬編碼和onehot編碼的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • Django數(shù)據(jù)庫遷移常見使用方法

    Django數(shù)據(jù)庫遷移常見使用方法

    這篇文章主要介紹了Django數(shù)據(jù)庫遷移常見使用方法,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-11-11
  • pycharm與jupyter?lab/notebook結(jié)合使用方式

    pycharm與jupyter?lab/notebook結(jié)合使用方式

    這篇文章主要介紹了pycharm與jupyter?lab/notebook結(jié)合使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • python合并多個excel的詳細過程

    python合并多個excel的詳細過程

    合并需求很多,常見的有相同數(shù)據(jù)結(jié)構(gòu),按行進行縱向拼接,下面這篇文章主要給大家介紹了關(guān)于python合并多個excel的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • Python?scipy利用快速傅里葉變換實現(xiàn)濾波

    Python?scipy利用快速傅里葉變換實現(xiàn)濾波

    這篇文章主要為大家詳細介紹了Python?scipy如何利用快速傅里葉變換實現(xiàn)濾波,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-01-01

最新評論