当前位置:首页 > 编程教程 > Python技术文章 > python爬虫headers设置后无效的解决方法

分享python爬虫headers设置后无效的解决方案

  • 发布时间:
  • 作者:码农之家
  • 点击:168

这篇文章主要知识点是关于python、爬虫、headers、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

Python微服务开发
Python微服务开发源码资料版
  • 类型:微服务大小:117 KB格式:zip作者:塔里克·齐亚德
立即下载

python爬虫headers设置后无效的解决方法

此次遇到的是一个函数使用不熟练造成的问题,但有了分析工具后可以很快定位到问题(此处推荐一个非常棒的抓包工具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的话可能就麻烦了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

Python 相关电子书
学习笔记
网友NO.867083

Python爬虫:将headers请求头字符串转为字典的方法

原生请求头字符串 raw_headers = """Host: open.tool.hexun.comPragma: no-cacheCache-Control: no-cacheUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36Accept: */*Referer: http://stock.hexun.com/gsxw/Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8""" 将字符串转为字典 split(sep=None, maxsplit=None)headers = dict([line.split(": ",1) for line in raw_headers.split("\n")]) 输出测试 print(headers)"""{ 'Accept-Language': ' zh-CN,zh;q=0.9,en;q=0.8', 'Accept-Encoding': ' gzip, deflate', 'Accept': ' */*', 'User-Agent': ' Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_2) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.84 Safari/537.36', 'Host': ' open.tool.hexun.com', 'Referer': ' http://stock.hexun.com/gsxw/', 'Pragma': ' no-cache', 'Cache-Control': ' no-cache'}""" 封装为函数 def get_headers(header_raw): """ 通过原生请求头获取请求头字典 :param header_r……

网友NO.568286

使用python将请求的requests headers参数格式化方法

如下所示: import json # 使用三引号将浏览器复制出来的requests headers参数赋值给一个变量headers = """Host: zhan.qq.comProxy-Connection: keep-aliveContent-Length: 799432Pragma: no-cacheCache-Control: no-cacheOrigin: http://zhan.qq.comUser-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryuptjZg9xmsfWzngPAccept: */*Referer: http://zhan.qq.com/edit/site/beta/2005406545/index.html?164097Accept-Encoding: gzip, deflateAccept-Language: zh-CN,zh;q=0.9,en;q=0.8Cookie: pgv_pvi=4342937600; RK=xFr4lrf07R; ptcz=a247c6170fb56cb4d5d41bf8461f11097a9be27bc7e7dc8b921254de9b1c924b; """ # 去除参数头尾的空格并按换行符分割headers = headers.strip().split('\n') # 使用字典生成式将参数切片重组,并去掉空格,处理带协议头中的://headers = {x.split(':')[0].strip(): ("".join(x.split(':')[1:])).strip().replace('/……

网友NO.762383

解决python3 requests headers参数不能有中文的问题

1 需求,heeaders 参数需要拼接中文参数param 解决如下 url = 'https://....search?keyword=' + param + 'page=1 q=0.01", "Accept-Encoding": "gzip, deflate, br", "Accept-Language": "zh-CN,zh;q=0.9", "Connection": "keep-alive", "Cookie": "Hm_lvt_0076fef7e919d8d7b24383dc8f1c852a=1522398473; Hm_lpvt_0076fef7e919d8d7b24383dc8f1c852a=1522398482", "Referer": "https://...../index.html?index=0 WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36", "X-Requested-With": "XMLHttpRequest"}rsp = requests.get(url, headers=header from urllib import parse str1 = 'haha哈哈' str2 = parse.quote(str1) #quote()将字符串进行编码 print(str2) #str2=haha%E5%93%88%E5%93%88 str3 = parse.unquote(str2) #解码字符串 print(str3) #str3=haha哈哈 以上这篇解决python3 requests headers参数不能有中文的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。 ……

<
1
>

Copyright 2018-2020 www.xz577.com 码农之家

版权投诉 / 书籍推广 / 赞助:520161757@qq.com