request.get中文乱码解决

问题描述

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

1
2
3
4
5
6
7
8
9
10
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)

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

解决思路

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

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

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

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

    答案是否定的

    1
    2
    3
    4
    5
    6
    7
    8
    9
    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字符串转码。

问题解决



本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!