BeautifulSoup解码错误

时间:2014-06-23 17:14:46

标签: python beautifulsoup

我正在尝试使用Beautiful Soup解析由Evernote生成的html文件。代码是:

html = open('D:/page.html', 'r')
soup = BeautifulSoup(html)

它出现以下错误:

File "C:\Python33\lib\site-packages\bs4\__init__.py", line 161, in __init__ markup = markup.read() File "C:\Python33\lib\encodings\cp1252.py", line 23, in decode return codecs.charmap_decode(input,self.errors,decoding_table)[0] UnicodeDecodeError: 'charmap' codec can't decode byte 0x9d in position 24274: character maps to <undefined>

如何解决此问题?

1 个答案:

答案 0 :(得分:11)

编码的字节字符串,甚至文件对象(以二进制模式打开)传递给BeautifulSoup;它会处理解码:

with open('D:/page.html', 'rb') as html:
    soup = BeautifulSoup(html)

BeautifulSoup在文档本身中查找HTML元数据(例如<meta> tag with charset attribute来解码文档;未能使用chardet库对(使用过的)编码进行(有根据的)猜测。 chardet使用有关用于为BeautifulSoup提供最可能的编解码器的字节序列的启发式和统计信息。

如果您有更多上下文并且已经知道要使用的正确编解码器,请将其传递给from_encoding参数:

with open('D:/page.html', 'rb') as html:
    soup = BeautifulSoup(html, from_encoding=some_explicit_codec)

请参阅Encodings section of the documentation