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 相关文章推荐
linux系统使用python监测网络接口获取网络的输入输出
Jan 15 Python
Python 字符串操作方法大全
Mar 11 Python
python使用htmllib分析网页内容的方法
May 08 Python
Python实现的简单算术游戏实例
May 26 Python
Python正则表达式教程之三:贪婪/非贪婪特性
Mar 02 Python
Python 备份程序代码实现
Mar 06 Python
Python字符串、整数、和浮点型数相互转换实例
Aug 04 Python
利用arcgis的python读取要素的X,Y方法
Dec 22 Python
在python3中pyqt5和mayavi不兼容问题的解决方法
Jan 08 Python
python中class的定义及使用教程
Sep 18 Python
Python 私有化操作实例分析
Nov 21 Python
Django程序的优化技巧
Apr 29 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
php2html php生成静态页函数
2008/12/08 PHP
php 动态多文件上传
2009/01/18 PHP
PHP实现搜索时记住状态的方法示例
2018/05/11 PHP
php开发最强大的IDE编辑的phpstorm 2020.2配置Xdebug调试的详细教程
2020/08/17 PHP
safari,opera嵌入iframe页面cookie读取问题解决方法
2010/06/23 Javascript
基于jquery的划词搜索实现(备忘)
2010/09/14 Javascript
Javascript 读取操作Sql中的Xml字段
2014/10/09 Javascript
JavaScript实现继承的4种方法总结
2014/10/16 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
2015/06/10 Javascript
全面解析Bootstrap表单使用方法(表单控件状态)
2015/11/24 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
vue axios整合使用全攻略
2018/05/24 Javascript
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
python 实时遍历日志文件
2016/04/12 Python
python 写入csv乱码问题解决方法
2016/10/23 Python
Python tkinter事件高级用法实例
2018/01/31 Python
用于业余项目的8个优秀Python库
2018/09/21 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
python 如何去除字符串头尾的多余符号
2019/11/19 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
基于Python fminunc 的替代方法
2020/02/29 Python
Django-silk性能测试工具安装及使用解析
2020/11/28 Python
Python解析m3u8拼接下载mp4视频文件的示例代码
2021/03/03 Python
Gap加拿大官网:Gap Canada
2017/08/24 全球购物
戴森台湾线上商城:Dyson Taiwan
2018/05/21 全球购物
有模特经验的简历自我评价
2013/09/19 职场文书
商铺租赁意向书
2014/04/01 职场文书
青年标兵事迹材料
2014/08/16 职场文书
思想作风建设心得体会
2014/10/22 职场文书
集团财务总监岗位职责
2015/04/03 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
百家讲坛观后感
2015/06/12 职场文书
python基于opencv批量生成验证码的示例
2021/04/28 Python
win10+anaconda安装yolov5的方法及问题解决方案
2021/04/29 Python