我正在尝试使用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>
如何解决此问题?
答案 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)