问题描述
在爬取网站新闻时发现,返回的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.tangsanshu.com/shengxu/’
a = requests.get(url=url,headers=headers).text
print(a)
对页面代码进行分析,发现页面是以utf-8格式编码的
解决思路
将get到的结果先转换为utf-8格式编码,之后再获取text属性
a = requests.get(url=url,headers=headers)
a.encoding='utf-8'
a=a.text
将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字符串转码。