request.get乱码解决

在爬取网页时遇到中文乱码问题,通过分析发现页面编码为utf-8。解决方案包括:1) 先设定响应编码为utf-8再获取text;2) 对text先编码为latin-1再解码为utf-8。直接用utf-8解码会失败,因为原始数据可能不是utf-8。实践证明这两种方法能有效解决乱码问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

在爬取网站新闻时发现,返回的html代码中中文是乱码

headers = {
    "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:89.0) Gecko/20100101 Firefox/89.0",
    "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
    "Accept-Language": "zh-CN",
    "Accept-Encoding": "gzip, deflate, br",
    "Referer": "http://www.sdyu.edu.cn/index.htm",
}
url='http://www.sdyu.edu.cn/xwzx/tzgg.htm'
a = requests.get(url=url,headers=headers).text
print(a)

image-20210806104431158

对页面代码进行分析,发现页面是以utf-8格式编码的

image-20210806104610491

解决思路

  1. 将get到的结果先转换为utf-8格式编码,之后再获取text属性

    a = requests.get(url=url,headers=headers)
    a.encoding='utf-8'
    a=a.text
    
  2. 将get到的text结果先编码,后解码

    a = requests.get(url=url,headers=headers).text.encode('latin-1').decode('utf-8')
    

    为什么要先编码后解码,直接utf-8解码不行吗?

    答案是否定的

    print(type(requests.get(url=url,headers=headers)))
    print(type(requests.get(url=url,headers=headers).text))
    print(type(requests.get(url=url,headers=headers).text.encode('latin-1')))
    print(type(requests.get(url=url,headers=headers).text.encode('latin-1').decode('utf-8')))
    ---------------------------------
    <class 'requests.models.Response'>
    <class 'str'>
    <class 'bytes'>
    <class 'str'>
    

    decode不能直接对字符串进行解码,所以要先将获取到的text字符串转码。

问题解决

image-20210806105430520


ext字符串转码。

问题解决

[外链图片转存中…(img-qztRtV9k-1630031472986)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值