這兩天
有小伙伴問小帥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__)
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 信息
def hello_world():
print(request.headers)
return "這里假裝有很多數據"
if __name__ == "__main__":
app.run(debug=True)
結果看到的 headers 信息是這樣的
Host: 127.0.0.1:5000
User-Agent: python-requests/2.21.0
Accept-Encoding: gzip, deflate
Accept: */*
Connection: keep-alive
哇靠
User-Agent: python-requests/2.21.0
居然使用 python 的庫來請求
你說小帥b不封你封誰呢?
所以小帥b這個時候進行判斷
你就獲取不到數據了
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老仙
法力無邊
與本文相關的文章