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 相关文章推荐
Django中模型Model添加JSON类型字段的方法
Jun 17 Python
使用Python将数组的元素导出到变量中(unpacking)
Oct 27 Python
Python编程pygal绘图实例之XY线
Dec 09 Python
Python走楼梯问题解决方法示例
Jul 25 Python
django框架自定义用户表操作示例
Aug 07 Python
python经典趣味24点游戏程序设计
Jul 26 Python
python中字典按键或键值排序的实现代码
Aug 27 Python
pyinstaller打包程序exe踩过的坑
Nov 19 Python
python生成任意频率正弦波方式
Feb 25 Python
Python标准库:内置函数max(iterable, *[, key, default])说明
Apr 25 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 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模拟asp中的XmlHttpRequest实现http请求的代码
2011/03/24 PHP
PHP+Ajax实现的检测用户名功能简单示例
2019/02/12 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
2020/10/30 PHP
JavaScript中关联原型链属性特性
2016/02/13 Javascript
Node.js程序中的本地文件操作用法小结
2016/03/06 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
jQuery实现点击行选中或取消CheckBox的方法
2016/08/01 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
vue.js编译时给生成的文件增加版本号
2018/09/17 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
element-ui 时间选择器限制范围的实现(随动)
2019/01/09 Javascript
解决Layui中layer报错的问题
2019/09/03 Javascript
[04:16]DOTA2全国高校联赛16强抽签
2018/05/02 DOTA
简单了解Python中的几种函数
2017/11/03 Python
Python 实现取矩阵的部分列,保存为一个新的矩阵方法
2018/11/14 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
python列表,字典,元组简单用法示例
2019/07/11 Python
为什么说python适合写爬虫
2020/06/11 Python
scrapy框架携带cookie访问淘宝购物车功能的实现代码
2020/07/07 Python
Python-split()函数实例用法讲解
2020/12/18 Python
PyCharm 解决找不到新打开项目的窗口问题
2021/01/15 Python
意大利奢侈品网站:Italist
2016/08/23 全球购物
加拿大当代时尚服饰、配饰和鞋类专业零售商和制造商:LE CHÂTEAU
2017/10/06 全球购物
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
求职自荐信范文格式
2013/11/29 职场文书
小学教师寄语大全
2014/04/03 职场文书
老师对学生的评语
2014/04/18 职场文书
社会实践活动报告
2015/02/05 职场文书
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
Python 用户输入和while循环的操作
2021/05/23 Python
利用JavaScript写一个简单计算器
2021/11/27 Javascript
vue+iview实现手机号分段输入框
2022/03/25 Vue.js
SQL使用复合索引实现数据库查询的优化
2022/05/25 SQL Server
JavaScript原型链中函数和对象的理解
2022/06/16 Javascript