日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”

發(fā)布時(shí)間:2023/12/10 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python爬虫自学之第(①)篇——爬虫伪装和反“反爬” 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

有些網(wǎng)站是防爬蟲(chóng)的。其實(shí)事實(shí)是,凡是有一定規(guī)模的網(wǎng)站,大公司的網(wǎng)站,或是盈利性質(zhì)比較強(qiáng)的網(wǎng)站,都是有高級(jí)的防爬措施的。總的來(lái)說(shuō)有兩種反爬策略,要么驗(yàn)證身份,把蟲(chóng)子踩死在門(mén)口;要么在網(wǎng)站植入各種反爬機(jī)制,讓爬蟲(chóng)知難而退。


本節(jié)內(nèi)容就著這兩種反爬策略提出一些對(duì)策。

身份偽裝

??就算是一些不知名的小網(wǎng)站,多多少少還會(huì)檢查一下headers驗(yàn)證一下訪者的身份,大網(wǎng)站就更不用說(shuō)了(我一次爬網(wǎng)易云的時(shí)候,忘記加headers,直接被紅掉)
??所以,為了讓蟲(chóng)寶們帶著信息凱旋歸來(lái),我們要教會(huì)爬蟲(chóng)們?nèi)绾?strong>偽裝;有時(shí)光偽裝也不行,我們還要教爬蟲(chóng)具體"如何做人",讓自己的舉止更像普通人而不是比單身漢手速還快的未知生物。

自定制 Requests Headers

  • “吾是人!”——修改user-agent:里面儲(chǔ)存的是系統(tǒng)和瀏覽器的型號(hào)版本,通過(guò)修改它來(lái)假裝自己是人。
  • “我從河北省來(lái)”——修改referer:告訴服務(wù)器你是通過(guò)哪個(gè)網(wǎng)址點(diǎn)進(jìn)來(lái)的而不是憑空出現(xiàn)的,有些網(wǎng)站會(huì)檢查。
  • “餅干!”:——帶上cookie,有時(shí)帶不帶餅干得到的結(jié)果是不同的,試著帶餅干去“賄賂”服務(wù)器讓她給你完整的信息。
  • 詳細(xì)數(shù)據(jù)可以F12捉個(gè)包來(lái)查看其Requests Headers

身份偽裝

??就算是一些不知名的小網(wǎng)站,多多少少還會(huì)檢查一下headers驗(yàn)證一下訪者的身份,大網(wǎng)站就更不用說(shuō)了(我一次爬網(wǎng)易云的時(shí)候,忘記加headers,直接被紅掉)
??所以,為了讓蟲(chóng)寶們帶著信息凱旋歸來(lái),我們要教會(huì)爬蟲(chóng)們?nèi)绾?strong>偽裝;有時(shí)光偽裝也不行,我們還要教爬蟲(chóng)具體"如何做人",讓自己的舉止更像普通人而不是比單身漢手速還快的未知生物。

自定制 Requests Headers

  • “吾是人!”——修改user-agent:里面儲(chǔ)存的是系統(tǒng)和瀏覽器的型號(hào)版本,通過(guò)修改它來(lái)假裝自己是人。
  • “我從河北省來(lái)”——修改referer:告訴服務(wù)器你是通過(guò)哪個(gè)網(wǎng)址點(diǎn)進(jìn)來(lái)的而不是憑空出現(xiàn)的,有些網(wǎng)站會(huì)檢查。
  • “餅干!”:——帶上cookie,有時(shí)帶不帶餅干得到的結(jié)果是不同的,試著帶餅干去“賄賂”服務(wù)器讓她給你完整的信息。
  • 詳細(xì)數(shù)據(jù)可以F12捉個(gè)包來(lái)查看其Requests Headers

headers = {'Referer':'https://accounts.pixiv.net/loginlang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index',#如某些網(wǎng)站(如p站)要檢查referer,就給他加上'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'#每個(gè)爬蟲(chóng)必備的偽裝} r = requests.get("https://segmentfault.com/a/1190000014383966",headers=headers)

headers數(shù)據(jù)通常用這兩個(gè)即可,而且筆者強(qiáng)烈推薦在爬蟲(chóng)中為每個(gè)request都配個(gè)user-agent,總比什么都沒(méi)有好,加了也不會(huì)報(bào)錯(cuò)。

降低主IP訪問(wèn)頻率

注意:這是針對(duì)長(zhǎng)期的,大范圍的爬蟲(chóng)的

有些網(wǎng)站會(huì)監(jiān)視某個(gè)ip的訪問(wèn)頻率和次數(shù),一但超過(guò)某個(gè)閾值,就把你當(dāng)作爬蟲(chóng)嫌犯趕出去了,這時(shí)就要想辦法降低自己的存在感了。

  • Zzzzz——休眠:爬一段時(shí)間后休息一會(huì),不僅是為了自己的成功,也是為服務(wù)器著想。
  • 我不去,我派別人去——ip代理:通過(guò)proxies參數(shù)來(lái)使用,前提是你要有ip,好的ip代理是要花錢(qián)的。
time.sleep(60)#用python自帶time模塊的休眠功能 proxies = {'http': 'http://10.10.1.10:3128',#“協(xié)議類型:完整ip地址+端號(hào)”'https': 'http://10.10.1.10:1080'}#代理ip字典,隨機(jī)調(diào)用 r = requests.get(url,headers=headers,proxies=proxies)

反 反爬(簡(jiǎn)析)

在系列第零篇中我提到獲取網(wǎng)頁(yè)源碼是有坑的,沒(méi)錯(cuò),有些時(shí)候headers偽裝什么的都做足了,可你還是不能如愿以償?shù)墨@得正確的網(wǎng)頁(yè)源碼,要么缺,要么給你一堆毫不相關(guān)的東西,要么干脆讓你紅掉。
這說(shuō)明要點(diǎn)不是偽不偽裝的問(wèn)題了,而是如何去解讀網(wǎng)頁(yè)的防爬機(jī)制從而推出解決方法,這就要求比較高的觀察和分析能力了

就我目前遇到的主要有:

  • 隨機(jī)校驗(yàn)碼:網(wǎng)頁(yè)生成隨機(jī)碼,并要求你將其提交才接受你的請(qǐng)求(多用在登錄驗(yàn)證中)。——這種校驗(yàn)碼通常藏在網(wǎng)頁(yè)源碼中,先取再交是策略。
  • 無(wú)序網(wǎng)址:網(wǎng)址后跟著一大串看不出規(guī)律的東西。——跟這種東西是沒(méi)話說(shuō)的,直接上selenium
  • 加密/雜亂的源碼:你知道你要的東西就在那里,但是不知道怎樣提取出來(lái)。——推理解謎,看腦子好不好使了。
  • 動(dòng)態(tài)加載:需要和頁(yè)面交互才能獲取更多信息,但是爬蟲(chóng)沒(méi)法和它交互啊。——直接上selenium/手動(dòng)捉包分析出目標(biāo)鏈接
  • ajax技術(shù):異步加載,網(wǎng)頁(yè)內(nèi)容分次加載,用爬蟲(chóng)只能得到第一次發(fā)出的html,導(dǎo)致信息不全。——上selenium/手動(dòng)捉包分析出目標(biāo)連接

補(bǔ)充:
selenium模塊,模擬瀏覽器,強(qiáng)是強(qiáng)但是缺點(diǎn)是慢。
其實(shí)動(dòng)態(tài)加載是為了方便用戶點(diǎn)哪看哪的,但這也加大了爬蟲(chóng)的難度,因?yàn)楹芏嘈畔⒁虼吮浑[藏了起來(lái)。

最后

偽裝有套路,代碼直接套,多加headers總沒(méi)錯(cuò)。

內(nèi)嵌反爬很靈活,沒(méi)有什么固定的代碼格式,要花時(shí)間去分析出來(lái)。

本文新出現(xiàn)的方法/模塊,后面會(huì)有實(shí)例,不要方。

下一篇正式進(jìn)入網(wǎng)頁(yè)解析主題,之后就可以開(kāi)始寫(xiě)小爬蟲(chóng)了?(^?^●)ノ。

headers = {'Referer':'https://accounts.pixiv.net/loginlang=zh&source=pc&view_type=page&ref=wwwtop_accounts_index',#如某些網(wǎng)站(如p站)要檢查referer,就給他加上'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.146 Safari/537.36'#每個(gè)爬蟲(chóng)必備的偽裝} r = requests.get("https://segmentfault.com/a/1190000014383966",headers=headers)

headers數(shù)據(jù)通常用這兩個(gè)即可,而且筆者強(qiáng)烈推薦在爬蟲(chóng)中為每個(gè)request都配個(gè)user-agent,總比什么都沒(méi)有好,加了也不會(huì)報(bào)錯(cuò)。

降低主IP訪問(wèn)頻率

注意:這是針對(duì)長(zhǎng)期的,大范圍的爬蟲(chóng)的

有些網(wǎng)站會(huì)監(jiān)視某個(gè)ip的訪問(wèn)頻率和次數(shù),一但超過(guò)某個(gè)閾值,就把你當(dāng)作爬蟲(chóng)嫌犯趕出去了,這時(shí)就要想辦法降低自己的存在感了。

  • Zzzzz——休眠:爬一段時(shí)間后休息一會(huì),不僅是為了自己的成功,也是為服務(wù)器著想。
  • 我不去,我派別人去——ip代理:通過(guò)proxies參數(shù)來(lái)使用,前提是你要有ip,好的ip代理是要花錢(qián)的。
time.sleep(60)#用python自帶time模塊的休眠功能 proxies = {'http': 'http://10.10.1.10:3128',#“協(xié)議類型:完整ip地址+端號(hào)”'https': 'http://10.10.1.10:1080'}#代理ip字典,隨機(jī)調(diào)用 r = requests.get(url,headers=headers,proxies=proxies)

反 反爬(簡(jiǎn)析)

在系列第零篇中我提到獲取網(wǎng)頁(yè)源碼是有坑的,沒(méi)錯(cuò),有些時(shí)候headers偽裝什么的都做足了,可你還是不能如愿以償?shù)墨@得正確的網(wǎng)頁(yè)源碼,要么缺,要么給你一堆毫不相關(guān)的東西,要么干脆讓你紅掉。
這說(shuō)明要點(diǎn)不是偽不偽裝的問(wèn)題了,而是如何去解讀網(wǎng)頁(yè)的防爬機(jī)制從而推出解決方法,這就要求比較高的觀察和分析能力了

就我目前遇到的主要有:

  • 隨機(jī)校驗(yàn)碼:網(wǎng)頁(yè)生成隨機(jī)碼,并要求你將其提交才接受你的請(qǐng)求(多用在登錄驗(yàn)證中)。——這種校驗(yàn)碼通常藏在網(wǎng)頁(yè)源碼中,先取再交是策略。
  • 無(wú)序網(wǎng)址:網(wǎng)址后跟著一大串看不出規(guī)律的東西。——跟這種東西是沒(méi)話說(shuō)的,直接上selenium
  • 加密/雜亂的源碼:你知道你要的東西就在那里,但是不知道怎樣提取出來(lái)。——推理解謎,看腦子好不好使了。
  • 動(dòng)態(tài)加載:需要和頁(yè)面交互才能獲取更多信息,但是爬蟲(chóng)沒(méi)法和它交互啊。——直接上selenium/手動(dòng)捉包分析出目標(biāo)鏈接
  • ajax技術(shù):異步加載,網(wǎng)頁(yè)內(nèi)容分次加載,用爬蟲(chóng)只能得到第一次發(fā)出的html,導(dǎo)致信息不全。——上selenium/手動(dòng)捉包分析出目標(biāo)連接

補(bǔ)充:
selenium模塊,模擬瀏覽器,強(qiáng)是強(qiáng)但是缺點(diǎn)是慢。
其實(shí)動(dòng)態(tài)加載是為了方便用戶點(diǎn)哪看哪的,但這也加大了爬蟲(chóng)的難度,因?yàn)楹芏嘈畔⒁虼吮浑[藏了起來(lái)。

最后

偽裝有套路,代碼直接套,多加headers總沒(méi)錯(cuò)。

內(nèi)嵌反爬很靈活,沒(méi)有什么固定的代碼格式,要花時(shí)間去分析出來(lái)。

本文新出現(xiàn)的方法/模塊,后面會(huì)有實(shí)例,不要方。

下一篇正式進(jìn)入網(wǎng)頁(yè)解析主題,之后就可以開(kāi)始寫(xiě)小爬蟲(chóng)了?(^?^●)ノ。

總結(jié)

以上是生活随笔為你收集整理的Python爬虫自学之第(①)篇——爬虫伪装和反“反爬”的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。