python爬虫headers设置后无效的解决方法


Posted in Python onOctober 21, 2017

此次遇到的是一个函数使用不熟练造成的问题,但有了分析工具后可以很快定位到问题(此处推荐一个非常棒的抓包工具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

python爬虫headers设置后无效的解决方法

然后查看请求详细信息的时候,请求头并没有加载进去,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爬虫headers设置后无效的解决方法

此次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,然后请求成功

python爬虫headers设置后无效的解决方法

需要注意的是用程序爬虫一定要把Header设置好,这个app如果反爬的时候封ip的话可能就麻烦了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python 字典(dict)遍历的四种方法性能测试报告
Jun 25 Python
python基础教程之缩进介绍
Aug 29 Python
python基础练习之几个简单的游戏
Nov 10 Python
Python将文本去空格并保存到txt文件中的实例
Jul 24 Python
详解PyCharm配置Anaconda的艰难心路历程
Aug 13 Python
django 自定义过滤器的实现
Feb 26 Python
Python常见数据类型转换操作示例
May 08 Python
python列表,字典,元组简单用法示例
Jul 11 Python
Python 中@property的用法详解
Jan 15 Python
pycharm配置安装autopep8自动规范代码的实现
Mar 02 Python
关于 Python json中load和loads区别
Nov 07 Python
人工智能深度学习OpenAI baselines的使用方法
May 20 Python
Python 结巴分词实现关键词抽取分析
Oct 21 #Python
恢复百度云盘本地误删的文件脚本(简单方法)
Oct 21 #Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 #Python
Python3操作SQL Server数据库(实例讲解)
Oct 21 #Python
Python3实现简单可学习的手写体识别(实例讲解)
Oct 21 #Python
python虚拟环境virtualenv的使用教程
Oct 20 #Python
Python环境搭建之OpenCV的步骤方法
Oct 20 #Python
You might like
社区(php&&mysql)二
2006/10/09 PHP
我的论坛源代码(七)
2006/10/09 PHP
一个取得文件扩展名的函数
2006/10/09 PHP
在php和MySql中计算时间差的方法详解
2015/03/27 PHP
浅谈php数组array_change_key_case() 函数和array_chunk()函数
2016/10/22 PHP
js实现双向链表互联网机顶盒实战应用实现
2011/10/28 Javascript
js对象与打印对象分析比较
2013/04/23 Javascript
JS截取url中问号后面参数的值信息
2014/04/29 Javascript
完美JQuery图片切换效果的简单实现
2016/07/21 Javascript
vue-resource 拦截器(interceptor)的使用详解
2017/07/04 Javascript
简单谈谈JS中的正则表达式
2017/09/11 Javascript
如何抽象一个Vue公共组件
2017/10/17 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
jQuery实现验证用户登录
2019/12/10 jQuery
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
jQuery实现雪花飘落效果
2020/08/02 jQuery
跟老齐学Python之有容乃大的list(4)
2014/09/28 Python
在Linux下调试Python代码的各种方法
2015/04/17 Python
Python中exit、return、sys.exit()等使用实例和区别
2015/05/28 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
django 框架实现的用户注册、登录、退出功能示例
2019/11/28 Python
Python如何用filter函数筛选数据
2020/03/05 Python
Python控制台实现交互式环境执行
2020/06/09 Python
详解python算法常用技巧与内置库
2020/10/17 Python
Python绘制数码晶体管日期
2021/02/19 Python
英国著名的美容护肤和护发产品购物网站:Lookfantastic
2020/11/23 全球购物
新西兰最大的天然保健及护肤品网站:HealthPost(直邮中国)
2021/02/13 全球购物
简单说下OSPF的操作过程
2014/08/13 面试题
工程质量承诺书范文
2014/03/27 职场文书
计算机售后服务承诺书
2014/05/30 职场文书
公司任命书模板
2014/06/06 职场文书
2014年综合治理工作总结
2014/11/20 职场文书
大学开学感言
2015/08/01 职场文书