程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式師世界 >> 編程語言 >  >> 更多編程語言 >> Python

不存在的!python說不給數據的浏覽器是不存在的!

編輯:Python

有時候我們些代碼是總發此疑惑?

為什麼別人采集 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,你又獲取到數據了

好啦,這篇文章就到這裡啦~對你有幫助就點贊收藏一下吧!

我是小熊貓,咱下篇文章見


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式師世界 All Rights Reserved