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下singleton模式的实现方法
Jul 16 Python
简单介绍Python的Tornado框架中的协程异步实现原理
Apr 23 Python
Python读取Excel的方法实例分析
Jul 11 Python
读写json中文ASCII乱码问题的解决方法
Nov 05 Python
Python实现图片转字符画的示例
Aug 22 Python
对Tensorflow中权值和feature map的可视化详解
Jun 14 Python
在IPython中进行Python程序执行时间的测量方法
Nov 01 Python
python中tkinter的应用:修改字体的实例讲解
Jul 17 Python
python实现几种归一化方法(Normalization Method)
Jul 31 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 Python
Python通用验证码识别OCR库ddddocr的安装使用教程
Jul 07 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 用sock技术发送邮件的函数
2007/07/21 PHP
php学习之 认清变量的作用范围
2010/01/26 PHP
php生成rss类用法实例
2015/04/14 PHP
护卫神php套件 php版本升级方法(php5.5.24)
2015/05/10 PHP
实例讲解php数据访问
2016/05/09 PHP
PHP对称加密算法(DES/AES)类的实现代码
2017/11/14 PHP
laravel邮件发送的实现代码示例
2020/01/31 PHP
PHP延迟静态绑定使用方法实例解析
2020/09/05 PHP
常见的5个PHP编码小陋习以及优化实例讲解
2021/02/27 PHP
getElementById在任意一款浏览器中都可以用吗的疑问回复
2007/05/13 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
页面只有一个text的时候,回车自动submit的解决方法
2010/08/12 Javascript
javascript下string.format函数补充
2010/08/24 Javascript
jQuery中bind,live,delegate与one方法的用法及区别解析
2013/12/30 Javascript
JS 获取浏览器和屏幕宽高等信息代码
2014/03/31 Javascript
跟我学习javascript的作用域与作用域链
2015/11/19 Javascript
JavaScript头像上传插件源码分享
2016/03/29 Javascript
jquery网页日历显示控件calendar3.1使用详解
2016/11/24 Javascript
基于require.js的使用(实例讲解)
2017/09/07 Javascript
基于JavaScript实现单例模式
2019/10/30 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
2020/11/03 Javascript
python去除文件中重复的行实例
2018/06/29 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
Pycharm 字体大小调整设置的方法实现
2019/09/27 Python
使用openCV去除文字中乱入的线条实例
2020/06/02 Python
python自动化发送邮件实例讲解
2021/01/04 Python
用pip给python安装matplotlib库的详细教程
2021/02/24 Python
css3中less实现文字长阴影(long shadow)
2020/04/24 HTML / CSS
Keds加拿大官网:购买帆布运动鞋和皮鞋
2019/09/26 全球购物
美国户外烹饪产品购物网站:Outdoor Cooking
2020/01/10 全球购物
UNIX文件类型
2013/08/29 面试题
表彰先进集体通报
2014/01/12 职场文书
青年志愿者事迹材料
2014/02/07 职场文书
楼面部长岗位职责范本
2014/02/14 职场文书
国际贸易专业自荐信
2014/06/10 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书