爬取某页面的数据时,在我本机环境进行请求,返回的结果是正常的,即不乱码,但是把代码拷贝到其他电脑运行,返回的结果就是乱码了。如下:
我本机的请求结果:
其他电脑运行返回的数据是乱码的,无论是设置utf-8、gbk还是设置gb2312,都无法解码:
百度了好久,都是说返回结果中文乱码的解决方案,都没有把问题解决(原来是自己问题点没有搜索对,毕竟当时自己也想不到)。后面在技术群中请教大佬后,才知道是headers请求头的Accept-Encoding设置值的问题,即Accept-Encoding='gzip,deflate,br’。
因为代码都一样,在自己本机运行都正常,所以压根想不到是这个导致,所以也没有一个一个的注释进行调试。
最终解决方案就是把gzip去掉,或者把 Accept-Encoding='gzip,deflate,br’ 整行都注释了,再次请求就可以得到正常的结果了。如下:
当然网上还有给出另一个方案(这方案在python我不知道怎么用,大家可以自行选择,有知道的也可以留意指导,毕竟本人菜鸟一枚):
设置Header的Accept-Encoding值的同时设置对应的自动解压缩的模式
req.Headers["Accept-Encoding"] = "gzip,deflate,br";
req.AutomaticDecompression = DecompressionMethods.GZip;
‘Accept-Encoding’:是浏览器发给服务器,声明浏览器支持的编码类型。一般有gzip,deflate,sdch,br 等等。
网上对这的解释,那就是:
普通浏览器访问网页,之所以添加"Accept-Encoding" = “gzip,deflate,br”,那是因为,浏览器对于从服务器中返回的对应的gzip压缩的网页,会自动解压缩,所以,其request的时候,添加对应的头,表明自己接受压缩后的数据。
而在我们编写的代码中,如果也添加此头信息,结果就是,返回的压缩后的数据,没有解码,而将压缩后的数据当做普通的html文本来处理,当前显示出来的内容,是乱码了。
相关信息:
从python爬虫引发出的gzip,deflate,sdch,br压缩算法分析 http://www.cnblogs.com/RainLa/p/8057367.html
爬取某页面的数据时,在我本机环境进行请求,返回的结果是正常的,即不乱码,但是把代码拷贝到其他电脑运行,返回的结果就是乱码了。如下:我本机的请求结果:其他电脑运行的结果:百度了好久,都是说返回结果中文乱码的解决方案,都没有把问题解决(原来是自己问题点没有搜索对,毕竟当时自己也想不到)。后面在技术群中请教大佬后,才知道是headers请求头的Accept-Encoding设置值的问题,即Accept-Encoding='gzip,deflate,br’。因为代码都一样,在自己本机运行都正常,所以压根
HttpWe
bResponse 四种
accept-
encoding解析(
gzip,
deflate,
br,identity[默认])
hwrs = (HttpWe
bResponse)hwr.GetResponse()
if (hwrs.Content
Encoding.ToLower().Contains("
gzip"))
我们在爬虫做请求的时候,一般会在request中添加请求头:Accept-Encoding,往往会指定方式为“gzip,deflate,br”三种压缩方式。
gzip和deflate为传统的压缩格式
br指的是Brotli,Google在2015年时候发布的新的数据压缩算法,而我们的工具request的response等文本只支持gzip,deflate格式的解压缩,还不支持br形式的解压...
此次遇到的是一个函数使用不熟练造成的问题,但有了分析工具后可以很快定位到问题(此处推荐一个非常棒的抓包工具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":"xx
使用python3做爬虫的时候,一些网站为了防爬虫会在请求头设置一些检查机制,因此我们就需要添加请求头,伪装成浏览器正常访问。
字段情况,详见下表:
请求头字段 说明 响应头字段
Accept 告知服务器发送何种媒体类型 Content-Type
Accept-Language 告知服务器发送何种语言 Content-Language
Accept-Charset 告知服务器发送何种字符集 Content-Type
Accept-Encoding 告知服务器采用何种压缩方式 Content-Encoding
返回的数据是
乱码,无论
设置utf-8、gbk、gb2312都无法解码
一个奇怪的现象是本地测试可以正常解码,代码在服务器上运行就无法解码,最终将该
请求头去除就正常了。
Accept:text/html,application/xhtm +xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-
Encoding:
gzip,
deflate, sdch,
br
Accept-La
本文会使用Fiddler来查看HTTP request和Response, 如果不熟悉这个工具,可以先参考[Fiddler教程]
HTTP压缩是指: Web服务器和浏览器之间压缩传输的”文本内容“的方法。 HTTP采用通用的压缩算法,比如
gzip来压缩HTML,Javascript, CSS文件。 能大大减少网络传输的数据量,提高了用户显示网页的速度。当然,同
时会增加一点点服务器的开销。 本文从HTTP协议的角度,来理解HTTP压缩这个概念。
HTTP内容编码和HTTP压缩的区别
我们在使用列表的过程中,经常需要遍历列表的所有元素,对每个元素执行相同的操作。今天就给大家介绍python中几种遍历列表的for循环方法。
首先我们先构造一个numbers列表,如下:
numbers = [12, 454, 123, 785, 65]
直接使用for循环简单结构遍历:
直接使用简单的for循环结构" for i in list: print(i) ",其中代码中的 i 可以自由命名,代码中的 list 为列表的名称,冒号后面的代码换行并缩进。代码如下:
# -*- codin
2、request方法加上verify=False参数
response = requests.request(‘GET’, ‘http://xxx.xxxx.com’, verify=False)
直接运行会报下面的警告:
InsecureRequestWarning: Unverifie
class="items"的标签div下包含有多个div标签,它们的class值都等于"item J_MouserOnverReq item-ad " 或 "item J_MouserOnverReq item-ad ",使用
items_list = driver.find_elements_by_xpath('//div[@class="items"]/div[@class="item J_MouserOnverReq "]')
items_list = driver.f
安装方法:pip3 install browsermob-proxy
下载地址:https://github.com/lightbody/browsermob-proxy/releases
注:先使用pip命令安装browsermob-proxy,然后根据上述地址下载二进制文件到本地,程序运行需要读取该二进制文件。
Windows使用示例:
# -*- coding: utf-8 -*-
# 导入相应的库
from brow
你可以使用Curl的`CURLOPT_ENCODING`选项来设置`Accept-Encoding`请求头,以支持`gzip`和`deflate`压缩格式。具体示例如下:
```c++
// 初始化Curl句柄
CURL *curl = curl_easy_init();
// 设置请求头
struct curl_slist *headers = NULL;
headers = curl_slist_append(headers, "Accept-Encoding: gzip, deflate");
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
// 设置支持gzip和deflate压缩格式
curl_easy_setopt(curl, CURLOPT_ENCODING, "gzip, deflate");
// 其他设置
// 执行请求
CURLcode res = curl_easy_perform(curl);
// 清理工作
curl_easy_cleanup(curl);
在上面的示例中,我们首先使用`curl_slist_append`函数将`Accept-Encoding`请求头添加到`headers`列表中,然后使用`CURLOPT_HTTPHEADER`选项将请求头设置到Curl句柄中。接着,我们使用`CURLOPT_ENCODING`选项来设置支持的压缩格式为`gzip`和`deflate`。最后,我们执行请求并在完成后进行清理工作。
需要注意的是,如果服务器返回的响应使用了压缩格式,Curl会自动解压缩响应数据,因此你无需手动解压缩。