爬取某页面的数据时,在我本机环境进行请求,返回的结果是正常的,即不乱码,但是把代码拷贝到其他电脑运行,返回的结果就是乱码了。如下:
我本机的请求结果:
在这里插入图片描述
其他电脑运行返回的数据是乱码的,无论是设置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’。因为代码都一样,在自己本机运行都正常,所以压根
HttpWebResponse 四种accept-encoding解析(gzip, deflate, br,identity[默认]) hwrs = (HttpWebResponse)hwr.GetResponse() if (hwrs.ContentEncoding.ToLower().Contains("gzip"))
我们在爬虫做请求候,一般会在request中添加请求头:Accept-Encoding,往往会指定方式为“gzip,deflate,br”三种压缩方式。 gzipdeflate为传统的压缩格式 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); // 设置支持gzipdeflate压缩格式 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会自动解压缩响应数据,因此你无需手动解压缩。