- 不同网站的编码并本完全相同,在爬虫应用中解析文本信息的时候需要考虑网页的编码方式, 否则获得的结果可能是乱码
可以从网页, 代码里的meta标签的charset属性中看到其编码方式, 倒如<meta charset=”utf-8>指定了网页的编码为utl-8
用于解析文本的Python库主要有BeautifulSoup.BeautifulSoup使用编码自动检测字库(unicodeDammit、chardet等) 来识别输人文档的编码, 并将其转换成unicode编码:同时, BeautifulSoup将输出文档转换成urf-8编码、值得注意的是,编码自动检测功能会搜索整个文本来检测编码,时间成本高,检测结果也可能会错误, 因此, 如果预先知道文档编码, 可以通过在创建BeautifulSoup对象的时候没置from_encoding参数来减少检测错认率和检测时间
soup =BeautifulSoup(html_input,from_encoding="gbk")
此外,可以使用prettify()或者encoding()方法来指定输出文档的编码
soup=prettify("gb2312")
自动检测一个页面的编码方式,可以通过chardet包来进行,需要事先安装,使用如下:
import chardet
import requests
res=requests.get("http://fudan.edu.cn")
cs=chardet.detect(res.content)#通过响应信息的content属性来判断页面的编码方式
chardet.detect的检测结果是一个字典,如下,字典的关键字包括’encoding‘和’confidence‘等,其中,前者的值就是页面编码,后者表示自动检测是对结果的确信度[0,1]
{ 'encoding':'utf-8','confidence':1.0,'language':''}
因此可以通过cs[‘encoding’];来得到页面编码