Python爬蟲反爬反惕,你應(yīng)該從這篇博客開啟,UA反爬演侯,Cookie 特定參數(shù)反爬

從本篇博客開始姿染,我們將進入《爬蟲 120 例》的反爬章節(jié),給大家準備了 20 篇反爬案例蚌本,一次學(xué)到位盔粹。

反爬理論知識

通過前面的爬蟲程序,你或許已經(jīng)注意到程癌,對于目標(biāo)站點來說舷嗡,爬蟲程序是機器訪問,從目標(biāo)站點的角度來看嵌莉,爬蟲帶來的流量都是“垃圾流量”进萄,是完全沒有價值的(刷量類爬蟲除外)。

為了屏蔽這些垃圾流量锐峭,或者為了降低自己服務(wù)器壓力中鼠,避免被爬蟲程序影響到正常人類的使用,開發(fā)者會研究各種各樣的手段沿癞,去反爬蟲援雇。

爬蟲與反爬蟲是一對共生關(guān)系,有爬蟲工程師椎扬,就必然存在反爬工程師惫搏,很多時候,爬蟲工程師與反爬工程師都在斗智斗勇蚕涤。

反爬沒有特定的分類筐赔,如果一個網(wǎng)站上了反爬代碼,一般情況下會使用幾種反爬措施搭配使用揖铜。

服務(wù)器驗證請求信息類爬蟲

本系列的博客從最簡單的反爬手段開始學(xué)習(xí)茴丰,入門級反爬:“User-Agent” 用戶代理反爬。

User-Agent

用戶代理(User-Agent)天吓,表示的是用戶的瀏覽器相關(guān)信息贿肩,該反爬邏輯是通過服務(wù)器端驗證請求頭中的 User-Agent 參數(shù),然后區(qū)分是爬蟲程序還是正常的瀏覽器訪問龄寞。

訪問任意網(wǎng)站汰规,喚醒開發(fā)者工具,然后在控制臺中輸入 navigator.userAgent萄焦,就可以獲取到 UA 字符串(User-Agent 字符串)控轿。

Python爬蟲反爬冤竹,你應(yīng)該從這篇博客開啟,UA反爬茬射,Cookie 特定參數(shù)反爬

UA 字符串的格式一般可以這么理解:

平臺 引擎版本 瀏覽器版本信息

如果在詳細分解鹦蠕,可以得到如下格式:

瀏覽器標(biāo)識 (操作系統(tǒng)標(biāo)識;加密等級在抛;瀏覽器語言) 引擎版本 瀏覽器版本信息

這樣你在看上圖所示的內(nèi)容钟病,就比較容易理解其含義了。

Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36

在不同的瀏覽器測試刚梭,你會發(fā)現(xiàn) UA 字符串都以 Mozilla 開頭肠阱,這是由于歷史上的瀏覽器大戰(zhàn),導(dǎo)致的遺留問題朴读。

下面對比市面上主流的三款瀏覽器的 UA 字符串屹徘。

# 谷歌瀏覽器
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36
# 火狐瀏覽器
Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:94.0) Gecko/20100101 Firefox/94.0
# IE11 瀏覽器
Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; rv:11.0) like Gecko

分析上述內(nèi)容中的相關(guān)數(shù)據(jù)含義

  • Mozilla/5.0:表示瀏覽器衅金;
  • Windows NT 6.1:操作系統(tǒng),我這里得到的是 Windows 7 操作系統(tǒng)鉴吹;
  • Win64/WOW64:64 位操作系統(tǒng)惩琉;
  • x64:發(fā)行版本瞒渠;
  • N在孝,I淮摔,U:加密等級和橙,這里沒有出現(xiàn);
  • AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36:這個如果你去研究晰搀,也有很多趣事外恕,不過咱們理解其是瀏覽器的版本就可以了。

有了基本的認知之后罪郊,我們就可以任意的去編寫不同的瀏覽器標(biāo)識了(多數(shù)時候是從開發(fā)者工具中直接復(fù)制)

相應(yīng)的尚洽,服務(wù)器也能從這個字符串中,識別出訪問它的瀏覽器相關(guān)信息(其實操作系統(tǒng)的信息也會被攜帶過去癣疟,甚至它可以驗證該 UA 字段是否復(fù)合特定的規(guī)則)

案例實操環(huán)節(jié)

拿 CSDN 熱榜進行測試潮酒,如果不設(shè)置 UA 字段,你將獲取不到任何返回數(shù)據(jù)竞川,你可以將下述 headers 置為空值委乌,然后查看運行結(jié)果荣回。

import requests

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36"
}
res = requests.get('https://blog.csdn.net/phoenix/web/blog/hot-rank?page=0&pageSize=25', headers=headers)
print(res.text)

User-Agent 生成
可以使用 Python 第三方庫壕吹,pip install fake_useragent删铃,也可以自己維護一個 UA 類猎唁。
User-Agent 參數(shù)相同的還有 HOSTReferer诫隅,都可以認為的設(shè)置一些信息進行反爬逐纬。

Cookie 反爬蟲

使用 Cookie 驗證,也是常見的反爬兔毒,由于目標(biāo)站點可遇不可求漫贞,所以接下來的內(nèi)容從理論層面說明,在后續(xù)會結(jié)合復(fù)雜的案例進行實操育叁。

Cookie 反爬蟲最簡單的手段
服務(wù)器端使用特殊的 Cookie 值進行驗證,如果發(fā)現(xiàn)傳遞過去的 Cookie 值不存在擂红,或者不符合生成規(guī)范,則不返回數(shù)據(jù)昵骤。

例如服務(wù)器驗證固定 Cookie 字段树碱,在前文獲取熱榜代碼中变秦,如果你不攜帶某些 Cookie 值成榜,那得到的就不是完整的數(shù)據(jù)(可自行測試,差異值為 username)蹦玫。

還有一種情況是驗證 Cookie 是否符合某種格式赎婚,例如 Cookie 由 JS 動態(tài)生成樱溉,而且復(fù)合某種潛在(開發(fā)者約定)的規(guī)則福贞,那該 Cookie 值傳遞到后臺之后撩嚼,后臺工程師直接驗證該值即可實現(xiàn)反爬效果拇舀,例如 Cookie 規(guī)則為 123abc123逻族,前面 3 個隨機數(shù)聘鳞,后面 3 個隨機數(shù)刁赖,中間三個隨機小寫字母搁痛,那后臺工程師就可以通過正則驗證客戶端傳遞的 Cookie 值长搀,是否復(fù)合規(guī)則宇弛,不符合,直接返回異常信息源请。

當(dāng)然這種手段很容易被識別出來枪芒,進一步還可以加入時間戳彻况,后臺工程師拿到 Cookie 中的時間戳之后,驗證當(dāng)前時間的差值舅踪,如果超過了某個值纽甘,也可以認為該 Cookie 是偽造的。

Cookie 還被用于用戶身份的驗證抽碌,例如很多站點的數(shù)據(jù)只有登錄之后才可以訪問悍赢,原因是 Cookie 記錄了用戶信息,Cookie 的這個應(yīng)用場景比較多货徙,例如華為云博客的系統(tǒng)消息頁面

https://developer.huaweicloud.com/usercenter/mysysmessage

點擊之后會跳轉(zhuǎn)到登錄頁面左权,但如果你在請求頭攜帶 Cookie 訪問,則得到對應(yīng)內(nèi)容痴颊,其中最重要的一個 Cookie 字段是 HWS_ID赏迟,測試代碼如下,你可以從開發(fā)者工具中復(fù)制出對應(yīng)的 Cookie 字段訪問該頁面蠢棱。

import requests
from lxml import etree

headers = {
    "user-agent": "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/95.0.4638.69 Safari/537.36",
    "cookie": '你的HWS_ID Cookie值;'
}
res = requests.get('https://developer.huaweicloud.com/usercenter/mysysmessage', headers=headers, allow_redirects=False)
with open("./1.html", "w", encoding="utf-8") as f:
    f.write(res.text)
elements = etree.HTML(res.text)
print(elements.xpath("http://title/text()"))

訂閱時間

今天是持續(xù)寫作的第 <font color=red>269</font> / 365 天锌杀。
可以<font color=#04a9f4>關(guān)注</font>我,<font color=#04a9f4>點贊</font>我泻仙、<font color=#04a9f4>評論</font>我糕再、<font color=#04a9f4>收藏</font>我啦。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末玉转,一起剝皮案震驚了整個濱河市亿鲜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌冤吨,老刑警劉巖蒿柳,帶你破解...
    沈念sama閱讀 222,865評論 6 518
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異漩蟆,居然都是意外死亡垒探,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,296評論 3 399
  • 文/潘曉璐 我一進店門怠李,熙熙樓的掌柜王于貴愁眉苦臉地迎上來圾叼,“玉大人,你說我怎么就攤上這事捺癞∫奈茫” “怎么了?”我有些...
    開封第一講書人閱讀 169,631評論 0 364
  • 文/不壞的土叔 我叫張陵髓介,是天一觀的道長惕鼓。 經(jīng)常有香客問我,道長唐础,這世上最難降的妖魔是什么箱歧? 我笑而不...
    開封第一講書人閱讀 60,199評論 1 300
  • 正文 為了忘掉前任矾飞,我火速辦了婚禮,結(jié)果婚禮上呀邢,老公的妹妹穿的比我還像新娘洒沦。我一直安慰自己,他們只是感情好价淌,可當(dāng)我...
    茶點故事閱讀 69,196評論 6 398
  • 文/花漫 我一把揭開白布申眼。 她就那樣靜靜地躺著,像睡著了一般蝉衣。 火紅的嫁衣襯著肌膚如雪豺型。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,793評論 1 314
  • 那天买乃,我揣著相機與錄音姻氨,去河邊找鬼县袱。 笑死泪幌,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的证鸥。 我是一名探鬼主播功戚,決...
    沈念sama閱讀 41,221評論 3 423
  • 文/蒼蘭香墨 我猛地睜開眼娶眷,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了啸臀?” 一聲冷哼從身側(cè)響起届宠,我...
    開封第一講書人閱讀 40,174評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎乘粒,沒想到半個月后豌注,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,699評論 1 320
  • 正文 獨居荒郊野嶺守林人離奇死亡灯萍,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,770評論 3 343
  • 正文 我和宋清朗相戀三年轧铁,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片旦棉。...
    茶點故事閱讀 40,918評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡齿风,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出绑洛,到底是詐尸還是另有隱情救斑,我是刑警寧澤,帶...
    沈念sama閱讀 36,573評論 5 351
  • 正文 年R本政府宣布真屯,位于F島的核電站脸候,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纪他,卻給世界環(huán)境...
    茶點故事閱讀 42,255評論 3 336
  • 文/蒙蒙 一鄙煤、第九天 我趴在偏房一處隱蔽的房頂上張望晾匠。 院中可真熱鬧茶袒,春花似錦、人聲如沸凉馆。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,749評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽澜共。三九已至向叉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間嗦董,已是汗流浹背母谎。 一陣腳步聲響...
    開封第一講書人閱讀 33,862評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留京革,地道東北人奇唤。 一個月前我還...
    沈念sama閱讀 49,364評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像匹摇,于是被迫代替她去往敵國和親咬扇。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,926評論 2 361

推薦閱讀更多精彩內(nèi)容