代码如下:

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。