python爬蟲17 | 據說你又被封 ip 了,你要學會假裝好本身,此次說說假裝你的頭部

這兩天python

 

有小夥伴問小帥bflask

 

爲何我爬取 xx 網站的時候瀏覽器

 

不返回給我數據服務器

 

並且還甩一句話給我app

 

「系統檢測到您頻繁訪問,請稍後再來」學習

 

 

 

小帥b看了一下他的代碼網站

 

for i in range(1,10000):url

    requests.get(url)spa

 

瞬間震驚了debug

 

這就感受

 

被連續 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.真的求求大家了,不要再來爬取了

相關文章
相關標籤/搜索