ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python爬虫 - 反爬之关于headers头的accept-encoding的问题

2021-05-20 19:01:27  阅读:260  来源: 互联网

标签:浏览器 encoding python 解码 爬虫 brotli accept br


复制浏览器的请求数据产生的问题

 

在爬取某网站时,我们习惯于直接在浏览器里复制headers和请求参数,粘贴到自己的代码里进行调试

 

 

 

 

 

 

 

但是,在爬取linkg网站时,发现了一个问题:

 

 

 

 

 

 

解码失败

运行:

 

 

无论怎么调试,就是说解码失败

 

后面发现是请求头里的'accept-encoding': 'gzip, deflate, br'

 

关键点

 

把其中的br删除掉就可以正常拿到数据:

 

 

 

 

 

 

 

有关accpt-encoding的,可以看这篇博客:

 

 

https://blog.csdn.net/weixin_40414337/article/details/88561066

 

精简的意思就是,accpet-encoding的作用是以客户端的身份告诉服务端,我支持那些数据压缩类型的,如果指定的话,服务端就会按指定好的格式返回,如果不指定的话就会不压缩,而以源数据返回

其中gzip和deflare两种类型的压缩,requests和httpx等主流的爬虫库都是可以自己解压缩数据的,而就是br不行,因为br是目前来说比较新的一种数据压缩格式,无损压缩,压缩比极高,比前两个都好,进而减少传输数据的大小,节省时间,所以目前的都支持br,浏览器也自然支持的,这就是问题所在

 

这也就是我上面把br删了就可以正常解析的原因

 

直面问题并解决

 

另外,针对br的,假如有的网站就支持br呢?咋办?   所以在代码层面也是要解决的,而不是逃避问题的把br删除掉

 

解决办法就是需要用brotli库(第三方库,需要安装)来解压,上面的博客里的案例

 

 

 

 

安装完brotli后执行:

 

 

那么,用这种brotli压缩还可以一定程度上达到反爬的效果,反正如果不知道这个的话,拿到返回的数据后你用各种编码方式(utf-8,gbk,gb18030,bt5)啥啥的,怎么解码都解不了,是不是可以防止一些初级的爬虫了啊

 

标签:浏览器,encoding,python,解码,爬虫,brotli,accept,br
来源: https://www.cnblogs.com/Eeyhan/p/14790322.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有