python爬蟲17 | 聽說你又被封 ip 了,你要學會偽裝好自己,這次說說偽裝你的頭部


這兩天

 

有小伙伴問小帥b

 

為什么我爬取 xx 網站的時候

 

不返回給我數據

 

而且還甩一句話給我

 

“系統檢測到您頻繁訪問,請稍后再來”

 

 

 

小帥b看了一下他的代碼

 

for i in range(1,10000):

    requests.get(url)

 

瞬間震驚了

 

這就感覺

 

被連續 fxxk 了 1w 次

 

你說對方受得了?

 

 

 

不封你 IP 封誰?

 

要會偽裝

 

要想想看

 

人是怎么訪問網站的

 

這次我們來說說偽裝 Header

 

 

那么

 

接下來就是

 

學習python的正確姿勢

 

 

當你要去爬取某個網站的數據的時候

 

你要想想看

 

如果是別人爬取你的數據

 

你會做什么操作

 

你是不是也不想

 

讓別人隨隨便便就瘋狂請求你的服務器

 

你是不是也會

 

采取一定的措施

 

 

比如

 

小帥b有一個網站

 

你分析到了小帥b的地址

 

當你想要通過 python 來爬取的時候...

 

 

小帥b來寫一個簡單的可以被請求的例子

 

from flask import Flask
app = Flask(__name__)

@app.route('/getInfo')def hello_world(): return "這里假裝有很多數據"

if __name__ == "__main__": app.run(debug=True)

 

ok

 

假設你現在分析到了小帥b的地址了

 

也就是可以通過 /getInfo 就可以獲取到小帥b網站上的數據了

 

你感覺很爽

 

就開始請求了

 

 url = 'http://127.0.0.1:5000/getInfo' response = requests.get(url) print(response.text)

 

沒錯

 

這個時候你確實獲取到數據了

 

 

小帥b覺得有點不對勁了

 

想看看請求的 header 信息

 


@app.route('/getInfo')def hello_world(): print(request.headers) return "這里假裝有很多數據"

if __name__ == "__main__": app.run(debug=True)

 

結果看到的 headers 信息是這樣的

 

Host: 127.0.0.1:5000User-Agent: python-requests/2.21.0Accept-Encoding: gzip, deflateAccept: */*Connection: keep-alive

 

哇靠

 

User-Agent: python-requests/2.21.0

 

居然使用 python 的庫來請求

 

你說小帥b不封你封誰呢?

 

 

所以小帥b這個時候進行判斷

 

你就獲取不到數據了

 

@app.route('/getInfo')def hello_world(): if(str(request.headers.get('User-Agent')).startswith('python')): return "小子,使用爬蟲是吧?滾你的" else: return "這里假裝有很多數據"

if __name__ == "__main__": app.run(debug=True)

 

你這個時候的請求

 

if __name__ == '__main__': url = 'http://127.0.0.1:5000/getInfo' response = requests.get(url) print(response.text)

 

得到的結果就是

 

小子,使用爬蟲是吧?滾你的

 

你已經在小帥b面前暴露了

 

那么怎么辦呢?

 

偽裝自己唄

 

python 不可以訪問

 

瀏覽器可以訪問呀

 

所以你可以修改你的請求頭

 

還記得 Fiddler(可點擊) 嗎?

 

你可以先在瀏覽器訪問

 

然后在抓取數據的時候獲取到 Header 數據

 

 

 

當然你也可以使用 Chrome (可點擊) 的控制面板獲取 Header 

 

 

有了 Header 信息之后

 

就可以使用 requests(可點擊) 模塊輕松獲取

 

恩,現在的你學會假裝自己是瀏覽器了

 

if __name__ == '__main__':
headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.36' }
url = 'http://127.0.0.1:5000/getInfo' response = requests.get(url,headers=headers) print(response.text)

 

再獲取一次可以發現

 

返回的是

 

這里假裝有很多數據

 

ok,你又獲取到數據了

 

 

當然

 

僅僅是偽裝自己是瀏覽器還不夠的

 

要多站在對方的角度想問題

 

往后

 

小帥b還會繼續跟你扯

 

怎么應對反爬蟲的種種策略

 

 

peace

 

帥b老仙

法力無邊

 

 

與本文相關的文章

 

1.教你在 Chrome 瀏覽器輕松抓包

2.教你通過 Fiddler 進行手機抓包

3.Requests庫把urllib庫拍在沙灘上

4.真的求求你們了,不要再來爬取了

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM