有時候我們些代碼是總發此疑惑?
為什麼別人采集 xx 網站的時候能成功,而我卻總是不返回給數據
出現這種原因時往往是我們沒有給夠偽裝, 被識別了出來~
就像人,你出門肯定是要穿衣服的對不,如果你不穿!
走在外面,肯定是最顯眼的一個,不抓你抓誰
還有一種就是明明我之前運行成功了,為什麼我現在再次運行時就不行了呢~
而且還甩一句話給我 “系統檢測到您頻繁訪問,請稍後再來”
好啦!現在咋們正經的來介紹一下面對此種情況該如何處理~
要會偽裝,要想想看,人是怎麼訪問網站的
這次我們來說說偽裝 Header ,當你要去爬取某個網站的數據的時候
你要想想看,如果是別人爬取你的數據,你會做什麼操作
你是不是也不想,讓別人隨隨便便就瘋狂請求你的服務器
你是不是也會,采取一定的措施
當你想要通過 python 來爬取的時候…
這邊我來寫一個簡單的可以被請求的例子
from flask import Flask
app = Flask(__name__)
@app.route('/getInfo')
def hello_world():
return "這裡假裝有很多數據"
if __name__ == "__main__":
app.run(debug=True)
ok ,假設你現在分析到了我的地址了,
也就是可以通過 /getInfo 就可以獲取到數據了
你感覺很爽,就開始請求了
url = 'http://127.0.0.1:5000/getInfo'
response = requests.get(url)
print(response.text)
沒錯,這個時候你確實獲取到數據了
但是!我覺得有點不對勁了,想看看請求的 header 信息
@app.route('/getInfo')
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 的庫來請求,你說我不封你封誰呢?
所以我這個時候進行判斷,就獲取不到數據了
@app.route('/getInfo')
def hello_world():
if(str(request.headers.get('User-Agent')).startswith('python')):
return "系統檢測到您頻繁訪問,請稍後再來"
else:
return "這裡假裝有很多數據"
歡迎加入白嫖Q群:660193417 ###
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)
得到的結果就是
“系統檢測到您頻繁訪問,請稍後再來”
你已經在我面前暴露了,想重新再來,那麼怎麼辦呢?
偽裝自己呗,python 不可以訪問
浏覽器可以訪問呀,所以你可以修改你的請求頭
先在浏覽器訪問,然後在抓取數據的時候獲取到 Header 數據
當然你也可以使用 Chrome 的控制面板獲取 Header
有了 Header 信息之後,就可以使用 requests模塊輕松獲取
恩,現在的你學會假裝自己是浏覽器了
歡迎加入白嫖Q群:660193417 ###
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,你又獲取到數據了
好啦,這篇文章就到這裡啦~對你有幫助就點贊收藏一下吧!