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函数的笔记整理
Apr 07 Python
python的构建工具setup.py的方法使用示例
Oct 23 Python
Python Cookie 读取和保存方法
Dec 28 Python
如何理解python面向对象编程
Jun 01 Python
基于Keras的格式化输出Loss实现方式
Jun 17 Python
django rest framework 过滤时间操作
Jul 12 Python
python创建文本文件的简单方法
Aug 30 Python
python利用proxybroker构建爬虫免费IP代理池的实现
Feb 21 Python
用Python简陋模拟n阶魔方
Apr 17 Python
我对PyTorch dataloader里的shuffle=True的理解
May 20 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 Python
python获取字符串中的email
Mar 31 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入门教程之面向对象的特性分析(继承,多态,接口,抽象类,抽象方法等)
2016/09/11 PHP
如何通过View::first使用Laravel Blade的动态模板详解
2017/09/21 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
JavaScript中定义类的方式详解
2016/01/07 Javascript
JavaScript的this关键字的理解
2016/06/18 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
Webpack性能优化 DLL 用法详解
2017/08/10 Javascript
详解实现一个通用的“划词高亮”在线笔记功能
2019/04/23 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
JavaScript将数组转换为链表的方法
2020/02/16 Javascript
JS实现网页时钟特效
2020/03/25 Javascript
微信小程序实现菜单左右联动
2020/05/19 Javascript
bootstrap实现tab选项卡切换
2020/08/09 Javascript
js实现贪吃蛇游戏 canvas绘制地图
2020/09/09 Javascript
javascript实现点击按钮切换轮播图功能
2020/09/23 Javascript
[55:48]VGJ.S vs TNC Supermajor 败者组 BO3 第二场 6.6
2018/06/07 DOTA
Python正规则表达式学习指南
2016/08/02 Python
python 读取摄像头数据并保存的实例
2018/08/03 Python
详解Python Qt的窗体开发的基本操作
2019/07/14 Python
django中账号密码验证登陆功能的实现方法
2019/07/15 Python
flask框架json数据的拿取和返回操作示例
2019/11/28 Python
对pytorch的函数中的group参数的作用介绍
2020/02/18 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
python如何发送带有附件、正文为HTML的邮件
2021/02/27 Python
白兰氏健康Mall:BRAND’S
2017/11/13 全球购物
美国销售第一的智能手机和平板电脑保护壳:OtterBox
2017/12/21 全球购物
推广普通话演讲稿
2014/05/23 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
社区安全生产月活动总结
2014/07/05 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
群众路线教师自我剖析材料
2014/09/29 职场文书
2015年食堂工作总结报告
2015/04/23 职场文书
抢劫罪辩护词
2015/05/21 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
解决Mysql的left join无效及使用的注意事项说明
2021/07/01 MySQL
磁贴还没死, 微软Win11可修改注册表找回Win10开始菜单
2021/11/21 数码科技