requests请求返回内容 中文乱码问题

1.为什么有时候request会出现请求的内容中文乱码

以国家统计局的[http://www.stats.gov.cn/tjsj/tjbz/tjyqhdmhcxhfdm/2016/]为例,开发者模式打开可以看到 Conten-Type没有指定默认的编码。 而requests使用get请求时候,response默认使用iso-8859-1编码对消息体进行编码,传送数据给客户端。
(大部分网页是有指定编码的)。
在这里插入图片描述

2. 解决方法

1.自行设置

查看该网页的网页源代码,还以上面国家统计局的连接为例,搜索charset的编码。然后在代码中指定它的编码格式,重新打印相应内容的text,这次中文就不会乱码问题了。
在这里插入图片描述

res = requests.get(url, headers = header)
res.encoding = ‘gb2312’
pritn(res.text)

2.利用apparent_encoding

res = requests.get(url, headers = header)
res.encoding = res.apparent_encoding
pritn(res.text)

3. 已经爬好的带有\u5430的字符串怎么转为正常的中文显示字符串

python3: 字符串.encode(‘utf-8’).decode(‘unicode_escape’)

当你使用Python的requests库获取网页内容时,如果遇到乱码,通常是因为HTTP头部的Content-Type没有正确设置字符编码,或者你收到的内容是以非UTF-8格式编码的。以下是解决这个问题的一般步骤: 1. **检查Content-Type**: 确保响应头中存在`Content-Type`字段,并确认其指定了正确的字符集,如`Content-Type: text/html; charset=utf-8`。 ```python response = requests.get('http://example.com') if 'charset' in response.headers['Content-Type']: encoding = response.headers['Content-Type'].split(';')[0].split('/')[-1] else: encoding = 'utf-8' # 如果未指定,默认尝试识别 content = response.text.decode(encoding) ``` 2. **处理异常**: 如果服务器没有明确指定编码,可以尝试几种常见的字符集,比如GBK、ISO-8859-1等,或者使用`chardet`库自动检测: ```python import chardet response_content = response.content encoding_guess = chardet.detect(response_content)['encoding'] content = response.text.decode(encoding_guess) ``` 3. **错误处理**: - 如果依然乱码,可能是网站设置了不允许爬虫解析,这时需要检查目标网站的Robots协议或尊重它们的爬取限制。 - 使用`response.raise_for_status()`在请求失败时抛出异常,以便检查是否由于HTTP状态码问题导致的编码问题。 如果你遇到了具体的问题,可以提供一下具体的请求代码以及返回的headers信息,我可以帮助你更准确地定位问题
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值