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 相关文章推荐
TensorFlow安装及jupyter notebook配置方法
Sep 08 Python
基于Python数据可视化利器Matplotlib,绘图入门篇,Pyplot详解
Oct 13 Python
Python实现矩阵相乘的三种方法小结
Jul 26 Python
OpenCV+python手势识别框架和实例讲解
Aug 03 Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 Python
python爬虫爬取监控教务系统的思路详解
Jan 08 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
python numpy实现多次循环读取文件 等间隔过滤数据示例
Mar 14 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 Python
python读取excel数据绘制简单曲线图的完整步骤记录
Oct 30 Python
python的dict判断key是否存在的方法
Dec 09 Python
python基础之匿名函数详解
Apr 21 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
CodeIgniter安全相关设置汇总
2014/07/03 PHP
PHP读取文件内容的五种方式
2015/12/28 PHP
PHP中的数组处理函数实例总结
2016/01/09 PHP
JavaScript 异步方法队列链实现代码分析
2010/06/05 Javascript
js showModalDialog参数的使用详解
2014/01/07 Javascript
javascript简单实现命名空间效果
2014/03/06 Javascript
JavaScript极简入门教程(一):基础篇
2014/10/25 Javascript
获取阴历(农历)和当前日期的js代码
2016/02/15 Javascript
jQuery编写设置和获取颜色的插件
2017/01/09 Javascript
HTML5+Canvas调用手机拍照功能实现图片上传(上)
2017/04/21 Javascript
AngularJS使用ocLazyLoad实现js延迟加载
2017/07/05 Javascript
webpack中如何使用雪碧图的示例代码
2018/11/11 Javascript
详解Vue组件之作用域插槽
2018/11/22 Javascript
JavaScript如何实现监听键盘输入和鼠标监点击
2020/07/20 Javascript
vue-cli3项目打包后自动化部署到服务器的方法
2020/09/16 Javascript
python中列表元素连接方法join用法实例
2015/04/07 Python
使用PyCharm配合部署Python的Django框架的配置纪实
2015/11/19 Python
pygame实现弹力球及其变速效果
2017/07/03 Python
K-means聚类算法介绍与利用python实现的代码示例
2017/11/13 Python
python连接mongodb密码认证实例
2018/10/16 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
python标记语句块使用方法总结
2019/08/05 Python
Python Web框架之Django框架Form组件用法详解
2019/08/16 Python
Python通过两个dataframe用for循环求笛卡尔积
2020/04/29 Python
Python调用shell命令常用方法(4种)
2020/05/11 Python
python 瀑布线指标编写实例
2020/06/03 Python
经济实惠的名牌太阳镜和眼镜:Privé Revaux
2021/02/07 全球购物
vue路由实现登录拦截
2021/03/24 Vue.js
旅游管理专业个人求职信范文
2013/12/24 职场文书
《庐山的云雾》教学反思
2014/04/22 职场文书
中学生学雷锋演讲稿
2014/04/26 职场文书
篮球比赛拉拉队口号
2014/06/10 职场文书
六一儿童节主持开场白
2015/05/28 职场文书
楚门的世界观后感
2015/06/03 职场文书
Pytorch 使用tensor特定条件判断索引
2021/04/08 Python
从QQtabBar看css命名规范BEM的详细介绍
2021/08/07 HTML / CSS