问题描述
在爬取网站新闻时发现,返回的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)
对页面代码进行分析,发现页面是以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字符串转码。
问题解决
ext字符串转码。
问题解决
[外链图片转存中…(img-qztRtV9k-1630031472986)]