Python 爬虫乱码问题
原创
©著作权归作者所有:来自51CTO博客作者1inux的原创作品,请联系作者获取转载授权,否则将追究法律责任
代码如下:
import requests
from bs4 import BeautifulSoup
headers={'User-Agent':'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.25 Safari/537.36 Core/1.70.3756.400 QQBrowser/10.5.4039.400'}
url='http://af.qq.com'
try:
r = requests.get(url=url,headers=headers,timeout=5)
#r.encoding='gb2312'
r.encoding=r.apparent_encoding # 完美解决乱码
print(r.status_code)
soup=BeautifulSoup(r.text,"lxml")
if soup.title:
tit=soup.title.string
print(url,r.status_code,tit)
else:
print("No title")
except requests.exceptions.RequestException as e:
print("error")
在对多个网站进行爬虫时,发现不同站点设置的默认编码不一致,如果使用r.encoding='gb2312',有可能导致非此编码的站点出现乱码情况,后经过了解发现可以使用apparent_encoding,
解释:
encoding是从http中的header中的charset字段中提取的编码方式,若header中没有charset字段则默认为ISO-8859-1编码模式,则无法解析中文,这是乱码的原因
apparent_encoding会从网页的内容中分析网页编码的方式,所以apparent_encoding比encoding更加准确。当网页出现乱码时可以把apparent_encoding的编码格式赋值给encoding。