python爬蟲headers設(shè)置后無(wú)效的解決方法
此次遇到的是一個(gè)函數(shù)使用不熟練造成的問(wèn)題,但有了分析工具后可以很快定位到問(wèn)題(此處推薦一個(gè)非常棒的抓包工具fiddler)
正文如下:
在爬取某個(gè)app數(shù)據(jù)時(shí)(app上的數(shù)據(jù)都是由http請(qǐng)求的),用Fidder分析了請(qǐng)求信息,并把python的request header信息寫在程序中進(jìn)行請(qǐng)求數(shù)據(jù)
代碼如下
import requests
url = 'http://xxx?startDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc'
headers={
"Host":"xxx.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"Referer": "http://app.jg.eastmoney.com/html_Report/index.html",
"Accept-Encoding": "gzip,deflate",
"Accept-Language": "en-us,en",
"Cookie":"xxx"
}
r = requests.get(url,headers)
print (r.text)
請(qǐng)求成功但是,返回的是
{"Id":"6202c187-2fad-46e8-b4c6-b72ac8de0142","ReturnMsg":"加載失??!"}
就是被發(fā)現(xiàn)不是正常請(qǐng)求被攔截了
然后我去Fidder中看剛才python發(fā)送請(qǐng)求的記錄 #蓋掉的兩個(gè)部分分別是Host和URL。

然后查看請(qǐng)求詳細(xì)信息的時(shí)候,請(qǐng)求頭并沒有加載進(jìn)去,User-Agent就寫著python-requests ! #請(qǐng)求頭里的UA信息是java,python程序,有點(diǎn)反爬蟲意識(shí)的網(wǎng)站、app都會(huì)攔截掉
Header詳細(xì)信息如下
GET http://xxx?istartDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc &Host=xxx.com &Connection=keep-alive &Accept=application%2Fjson%2C+text%2Fjavascript%2C+%2A%2F%2A%3B+q%3D0.01 &User-Agent=Mozilla%2F5.0+%28Windows+NT+6.1%3B+WOW64%29+AppleWebKit%2F537.36+%28KHTML%2C+like+Gecko%29+Chrome%2F29.0.1547.59+Safari%2F537.36 &X-Requested-With=XMLHttpRequest &Referer=xxx &Accept-Encoding=gzip%2Cdeflate &Accept-Language=en-us%2Cen &Cookie=xxx HTTP/1.1 Host: xxx.com User-Agent: python-requests/2.18.4 Accept-Encoding: gzip, deflate Accept: */* Connection: keep-alive HTTP/1.1 200 OK Server: nginx/1.2.2 Date: Sat, 21 Oct 2017 06:07:21 GMT Content-Type: application/json; charset=utf-8 Content-Length: 75 Connection: keep-alive Cache-Control: private X-AspNetMvc-Version: 5.2 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET
一開始還沒發(fā)現(xiàn),等我把請(qǐng)求的URL信息全部讀完,才發(fā)現(xiàn)程序把我的請(qǐng)求頭信息當(dāng)做參數(shù)放到了URL里
那就是我請(qǐng)求的時(shí)候request函數(shù)Header信息參數(shù)用錯(cuò)了
又重新看了一下Requests庫(kù)的Headers參數(shù)使用方法,發(fā)現(xiàn)有一行代碼寫錯(cuò)了,在使用request.get()方法時(shí)要把參數(shù) “headers =“寫出來(lái)
更改如下:
import requests
url = 'http://xxx?startDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc'
headers={
"Host":"xxx.com",
"Connection": "keep-alive",
"Accept": "application/json, text/javascript, */*; q=0.01",
"User-Agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
"Referer": "http://app.jg.eastmoney.com/html_Report/index.html",
"Accept-Encoding": "gzip,deflate",
"Accept-Language": "en-us,en",
"Cookie":"xxx"
}
r = requests.get(url,headers=headers)
然后去查看Fiddler中的請(qǐng)求。

此次python中的請(qǐng)求頭已經(jīng)正常了,請(qǐng)求詳細(xì)信息如下
GET http://xxx?startDate=2017-10-19&endDate=2017-10-19&pageIndex=1&limit=50&sort=datetime&order=desc HTTP/1.1 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/29.0.1547.59 Safari/537.36 Accept-Encoding: gzip,deflate Accept: application/json, text/javascript, */*; q=0.01 Connection: keep-alive Host: xxx.com X-Requested-With: XMLHttpRequest Referer: http://xxx Accept-Language: en-us,en Cookie: xxx HTTP/1.1 200 OK Server: nginx/1.2.2 Date: Sat, 21 Oct 2017 06:42:21 GMT Content-Type: application/json; charset=utf-8 Content-Length: 75 Connection: keep-alive Cache-Control: private X-AspNetMvc-Version: 5.2 X-AspNet-Version: 4.0.30319 X-Powered-By: ASP.NET
然后又用python程序請(qǐng)求了一次,結(jié)果請(qǐng)求成功,返回的還是
{"Id":"6202c187-2fad-46e8-b4c6-b72ac8de0142","ReturnMsg":"加載失敗!"}
因?yàn)橐话鉩ookie都會(huì)在短時(shí)間內(nèi)過(guò)期,所以更新了cookie,然后請(qǐng)求成功

需要注意的是用程序爬蟲一定要把Header設(shè)置好,這個(gè)app如果反爬的時(shí)候封ip的話可能就麻煩了。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- Python urllib庫(kù)如何添加headers過(guò)程解析
- Python爬蟲headers處理及網(wǎng)絡(luò)超時(shí)問(wèn)題解決方案
- 使用Python爬蟲庫(kù)requests發(fā)送請(qǐng)求、傳遞URL參數(shù)、定制headers
- 解決python3 requests headers參數(shù)不能有中文的問(wèn)題
- Python爬蟲:將headers請(qǐng)求頭字符串轉(zhuǎn)為字典的方法
- 使用python將請(qǐng)求的requests headers參數(shù)格式化方法
- Python headers請(qǐng)求頭如何實(shí)現(xiàn)快速添加
相關(guān)文章
Python?BeautifulSoup4實(shí)現(xiàn)數(shù)據(jù)解析與提取
Beautiful?Soup是一個(gè)Python的庫(kù),用于解析HTML和XML文檔,提供了方便的數(shù)據(jù)提取和操作功能,下面小編就來(lái)和大家詳細(xì)聊聊如何利用BeautifulSoup4實(shí)現(xiàn)數(shù)據(jù)解析與提取吧2023-10-10
python錯(cuò)誤調(diào)試及單元文檔測(cè)試過(guò)程解析
這篇文章主要介紹了python錯(cuò)誤調(diào)試及單元文檔測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12
Python的SimpleHTTPServer模塊用處及使用方法簡(jiǎn)介
這篇文章主要介紹了Python的SimpleHTTPServer模塊用處及使用方法簡(jiǎn)介,小編覺得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,需要的朋友可以參考下2018-01-01
基于python OpenCV實(shí)現(xiàn)動(dòng)態(tài)人臉檢測(cè)
這篇文章主要為大家詳細(xì)介紹了基于python OpenCV實(shí)現(xiàn)動(dòng)態(tài)人臉檢測(cè),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05
python關(guān)鍵字傳遞參數(shù)實(shí)例分析
在本篇文章里小編給大家整理的是一篇關(guān)于python關(guān)鍵字傳遞參數(shù)實(shí)例分析內(nèi)容,有需要的朋友們可以學(xué)習(xí)參考下。2021-06-06
使用Python+selenium實(shí)現(xiàn)第一個(gè)自動(dòng)化測(cè)試腳本
這篇文章主要介紹了使用Python+selenium實(shí)現(xiàn)第一個(gè)自動(dòng)化測(cè)試腳本,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-03-03

