在获取网页时会遇到各种各样的编码问题,我们有不同的编码方式,但是在使用BeautifulSoup时,他有自动检测编码的功能,但是这样遍历一遍,知道编码也是一个很慢的过程。而且依然有可能出错。因此我们可以在实例化BeautifulSoup时,加上编码规则,这样就可避免错误。
首先我们先查看爬虫的页面的编码方式,使用下列代码即可获得
url = 'http://www.baidu.com'
>>> res = requests.get(url)
>>> soup = bs(res.content,'lxml')
>>> soup.original_encoding
'utf-8'
>>> soup = bs(res.content,'lxml',from_encoding = 'utf-8')
>>> soup
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta content="text/html;charset=utf-8" http-equiv="content-type"/><me
输出编码时,可以调用 BeautifulSoup 对象或任意节点的 encode() 方法,就像Python的字符串调用 encode() 方法一样:
soup.p.encode("latin-1")
# '<p>Sacr\xe9 bleu!</p>'
soup.p.encode("utf-8")
# '<p>Sacr\xc3\xa9 bleu!</p>'
引入解决编码问题
from bs4 import UnicodeDammit
>>> dammit = UnicodeDammit("Sacr\xc3\xa9 bleu!")
>>> print(dammit.unicode_markup)
Sacré bleu!
>>> dammit.original_encoding