requests库获取网页后,print中文会出现乱码,最简单的办法是根据网页编码设置encodingpython
import requests r = requests.get('https://www.baidu.com') r.encoding='utf-8' # 根据网页编码设置 print(r.text)
这种方式能够达成目标,可是不够智能。其实,requests库包含了几个有用的函数,能够获取网页的编码app
一、requests.utils.get_encoding_from_headers函数能够根据响应头获取网页编码函数
import requests r = requests.get('https://www.baidu.com') r.encoding=requests.utils.get_encoding_from_headers(r.headers) print(r.text)
二、requests.utils.get_encodings_from_content函数能够根据网页内容获取编码编码
import requests r = requests.get('https://www.baidu.com') r.encoding=requests.utils.get_encodings_from_content(r.text) # 注意get_encodings_from_content的参数是字符串,因此要用r.text而不是r.content print(r.text)
三、response.apparent_encoding 自动识别文本编码(推荐使用)spa
import requests r = requests.get('https://www.baidu.com') r.encoding=r.apparent_encoding print(r.text)
注:一般获取正常的网页后使用以上三个函数任意一个均可以正常完成任务。可是也存在获取的编码与网页实际编码不符合的状况,要根据状况灵活使用。code
意外状况:utf-8
有时候网页编码是gb2312,而显示中仍是有个别文字是乱码,例如我曾经遇到“楽”就乱码了,解决办法是,设置编码为gbk或者gb18030,编码内容上gb18030 > gbk > gb2312,若是内容中有繁体或者少数民族文字时,考虑使用gbk和个gb18030。字符串