python爬虫headers设置后无效解决方案
此次遇到的是一个函数使用不熟练造成的问题,但有了分析工具后可以很快定位到问题(此处推荐一个非常棒的抓包工具fiddler)
正文如下:
在爬取某个app数据时(app上的数据都是由http请求的),用Fidder分析了请求信息,并把python的request header信息写在程序中进行请求数据
代码如下
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)
请求成功但是,返回的是
{"Id":"6202c187-2fad-46e8-b4c6-b72ac8de0142","ReturnMsg":"加载失败!"}
就是被发现不是正常请求被拦截了
然后我去Fidder中看刚才python发送请求的记录 #盖掉的两个部分分别是Host和URL,

然后查看请求详细信息的时候,请求头并没有加载进去,User-Agent就写着python-requests ! #请求头里的UA信息是java,python程序,有点反爬虫意识的网站、app都会拦截掉
Header详细信息如下
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
一开始还没发现,等我把请求的URL信息全部读完,才发现程序把我的请求头信息当做参数放到了URL里
那就是我请求的时候request函数Header信息参数用错了
又重新看了一下Requests库的Headers参数使用方法,发现有一行代码写错了,在使用request.get()方法时要把参数 “headers =“写出来
更改如下:
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中的请求,

此次python中的请求头已经正常了,请求详细信息如下
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程序请求了一次,结果请求成功,返回的还是
{"Id":"6202c187-2fad-46e8-b4c6-b72ac8de0142","ReturnMsg":"加载失败!"}
因为一般cookie都会在短时间内过期,所以更新了cookie,然后请求成功

需要注意的是用程序爬虫一定要把Header设置好,这个app如果反爬的时候封ip的话可能就麻烦了。
python爬虫headers设置后无效解决方案的更多相关文章
- Python爬虫之设置selenium webdriver等待
Python爬虫之设置selenium webdriver等待 ajax技术出现使异步加载方式呈现数据的网站越来越多,当浏览器在加载页面时,页面上的元素可能并不是同时被加载完成,这给定位元素的定位增加 ...
- Python爬虫:设置Cookie解决网站拦截并爬取蚂蚁短租
前言 文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者: Eastmount PS:如有需要Python学习资料的小伙伴可以加 ...
- useJDBC4ColumnNameAndLabelSemantics设置后无效,怎么办?
连接的是DB2数据库, 在查询语句中有SELECT COLUMNNAME AS ALIASNAME FROM TABLE这样的结构时, 会报如下错误: Caused by: com.ibm.db2.j ...
- mysql: expire_logs_days设置后无效问题
Sina blog - MySQL的 expire_logs_days 和 PURGE MASTER LOGS 无效问题
- Eclipse Kelper 设置代理服务器无效解决方案
Open Network Connection Settings. Select Active Provider to "Manual". Set HTTP/HTTPS proxy ...
- (转)Python爬虫--通用框架
转自https://blog.csdn.net/m0_37903789/article/details/74935906 前言: 相信不少写过Python爬虫的小伙伴,都应该有和笔者一样的经历吧只要确 ...
- Python 爬虫的代理 IP 设置方法汇总
本文转载自:Python 爬虫的代理 IP 设置方法汇总 https://www.makcyun.top/web_scraping_withpython15.html 需要学习的地方:如何在爬虫中使用 ...
- python爬虫模拟登录验证码解决方案
[前言]几天研究验证码解决方案有三种吧.第一.手工输入,即保存图片后然后我们手工输入:第二.使用cookie,必须输入密码一次,获取cookie:第三.图像处理+深度学习方案,研究生也做相关课题,就用 ...
- Python爬虫学习:四、headers和data的获取
之前在学习爬虫时,偶尔会遇到一些问题是有些网站需要登录后才能爬取内容,有的网站会识别是否是由浏览器发出的请求. 一.headers的获取 就以博客园的首页为例:http://www.cnblogs.c ...
随机推荐
- Python 之Memcache中间件
一.引子 Memcached 是一个高性能的分布式内存对象缓存系统,用于动态Web应用以减轻数据库负载,它通过在内存中缓存数据和减少读取数据库的次数,从而提高动态数据库驱动网站的速度.Memcache ...
- RabbitMQ入门:总结
随着上一篇博文的发布,RabbitMQ的基础内容我也学习完了,RabbitMQ入门系列的博客跟着收官了,以后有机会的话再写一些在实战中的应用分享,多谢大家一直以来的支持和认可. RabbitMQ入门系 ...
- 安装VMware-tools时,一直停在“The path "" is not valid path to the gcc binary.”
解决方案: 1.先停止安装(ctrl+Z) 2.在终端输入: yum -y update yum -y install kernel-headers kernel-devel gcc 3.重新安装VM ...
- Kettle日常使用汇总整理
Kettle日常使用汇总整理 Kettle源码下载地址: https://github.com/pentaho/pentaho-kettle Kettle软件下载地址: https://sourcef ...
- 云计算时代,传统企业 IT 从业者如何做好转型?
本文来源于国外社区 DZone,作者 Dennis O'Reilly 撰写过多篇关于云计算.混合云等内容的文章,本文内容围绕云计算时代,企业纷纷上云,传统 IT 从业者如何做好转型. 本文由“数梦工场 ...
- django orm 操作表
django orm 操作表 1.基本操作 增 models.Tb1.objects.create(c1='xx', c2='oo') 增加一条数据,可以接受字典类型数据 **kwargs inser ...
- windows下在virtualbox中的Fuel Openstack 9.0 安装过程
一.材料: 1.软件: virtualbox xshell(或putty,winscp) bootstrap.zip(580MB) mirrors(3.01GB) MirantisOpenStack- ...
- 配置idea
http://www.cnblogs.com/yangyquin/p/5285272.html
- C++ 函数 函数的重载 有默认参数的函数
函数的重载 C++允许用同一函数名定义多个函数,这些函数的参数个数和参数类型不同.这就是函数的重载(function overloading). int max1(int a,int b, int c ...
- 如何知道一个App的包名呢
包名(Package name)是Android系统中判断一个APP的唯一标识 记录我获取包名的几种方式 方法一:通过cmd命令,打开你要获取包名的APP 1.adb shell 2.dumpsys ...