Python requests关于爬虫下载下来的数据乱码问题

摘要:
1.html下载后乱码直接用浏览器检查原网页的编码,然后把你下载下来的网页数据设置为网页上显示的编码,result.encoding=“网页上的编码”2.直接获取api的json数据乱码最近几年网页传输出现了新的br压缩方式,在请求的时候如果你的headers里面Accept-Encoding是“gzip,deflate,br”,headers={'User-Agent':'Mozilla/5.0

1.html下载后乱码

直接用浏览器检查原网页的编码,然后把你下载下来的网页数据设置为网页上显示的编码,result.encoding=“网页上的编码”

2.直接获取api的json数据乱码

最近几年网页传输出现了新的br压缩方式,在请求的时候如果你的headers里面
Accept-Encoding是“gzip, deflate, br”,

headers ={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding': 'gzip, deflate, br',
    'X-Requested-With': 'XMLHttpRequest',
    'Connection': 'keep-alive',
}

服务器会在其中选择一种方式压缩,将数据传输回来,有的服务器会选择br方式将数据传输回来,由于现在一些库还暂时不认识br这种压缩方式,所以下载下来就会乱码,就像这样
数据乱码解决的办法有两个:

①将headers中的’Accept-Encoding’属性的值修改一下

改为’gzip’或者是‘deflate’,像这样:

headers ={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding': 'gzip',
    'X-Requested-With': 'XMLHttpRequest',
    'Connection': 'keep-alive',
}

这样返回的数据的压缩方式就使用的是gzip,数据就可以正常被解压,从而可以正常读取

②安装brotli库进行解压

先安装库pip install brotli,现在我们的headers就改成这样,Accept-Encoding就只用br,因为我们要使用返回的用br压缩的数据,这里用一段代码演示

importrequests
importbrotli
start_url = "url"headers ={
    'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0',
    'Accept': '*/*',
    'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
    'Accept-Encoding': 'br',
    'X-Requested-With': 'XMLHttpRequest',
    'Connection': 'keep-alive',
}
r =requests.get(start_url, headers)
content =brotli.decompress(r.content)
content = content.decode("utf-8")
print(content)

免责声明:文章转载自《Python requests关于爬虫下载下来的数据乱码问题》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【推荐系统实战】:C++实现基于用户的协同过滤(UserCollaborativeFilter)LaTeX技巧22:LaTeX文档中的参考文献初级下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

MODBUS 数据格式相关记录

串口通讯格式:   串口通讯可以分为同步通讯(Synchronous)和异步通讯(Asynchronous)。同步通讯时有一根时钟信号,数据格式中没有起始位和停止位;异步通讯中没有时钟信号,数据格式中包含起始位和停止位。此次记录内容为使用STM32的异步通信配置学习。   串口异步传输一帧数据需要多个位,这些位的描述为 起始位+数据位+校验位+停止位。起始...

ETL工具之Kettle的简单使用一(不同数据库之间的数据抽取-转换-加载)

ETL工具之Kettle将一个数据库中的数据提取到另外一个数据库中: 1.打开ETL文件夹,双击Spoon.bat启动Kettle 2.资源库选择,诺无则选择取消 3.选择关闭 4.新建一个转换 5.配置所需数据库 6.将需要进行提取的数据表,用表输入得到 7.选择源数据所在数据库及表,sql语句可自...

在linux系统下检查postgresql数据库安装,登录数据库及简单的查看数据库

1. 检查Linux系统是否安装数据库 首先查看自己的系统是否安装了postgresql数据库命令如下:rpm -qa | grep postgresql 如果没有显示查询结果(如下图所示)说明就未安装postgresql数据库 2. 登录数据库 输入命令 su postgres 然后在输入命令psql,结果如入所示 这时相当于系统用户postgres...

element-ui的table,切换左侧树数据替换后高度变小问题

页面结构为左侧是树,右侧是表格,当切换左侧树时候,右侧表格数据改变,但是表格高度会变小,网上找的两种解决方法 方法一: 在表格数据改变后执行: this.$nextTick(()=>{ 表格加上ref='table' this.$refs.table.doLayout() }) 方法二: 1.固定表头高度 2.body_wrapper使用calc...

elementui源码解析markdown处理

一些参考网址: markdown-it官网:markdown-it | markdown-it 中文文档 (docschina.org) markdown-it插件的分析和源码分析参考地址:https://zhuanlan.zhihu.com/p/64290806 参考例子:https://gitee.com/springliuliu/mdToHtm...

人脸识别和检测中错误数据的三种类别

1.错误标记 即标记该图时就已经出错 2.假阴性: 即该图本应该判断正样本的,但是可能因为照片中化妆、带眼镜、人物造型变化比较大或是遮挡等原因导致它被误判为负样本 3.假阳性: 即该图本应该判断负样本的,但是可能因为其与正样本人的五官非常相似,所以被误判为正样本...