BeautifulSoup中文乱码解决问题

import urllib2
from BeautifulSoup import BeautifulSoup

page = urllib2.urlopen('http://www.leeon.me');
soup = BeautifulSoup(page,fromEncoding="gb18030")

print soup.originalEncoding
print soup.prettify()

如果中文页面编码是gb2312,gbk,在BeautifulSoup构造器中传入fromEncoding="gb18030"参数即可解决乱码问题,即使分析的页面是utf8的页面使用gb18030也不会出现乱码问题!

转载自:《beautifulsoup解析中文网页乱码》

2012.9.19更新:

实际上,fromEncoding="gb18030"并不是一劳永逸的方法,当面对iso-8859-1编码的中文网页时,还是会出现乱码。

BS会乱码的根源是:其内部猜测编码的机制并不完善。

因此,最根本的解决方法是,使用编码自动检测工具,获得网页真实编码,例如chardet这个模块。然后将获取到的encoding设置到BS的fromEncoding构造参数中!!!

Leave a Reply

Your email address will not be published. Required fields are marked *