我试图解析从wildweb下载的任意文档,是的,我无法控制它们的内容。在
既然Beautiful Soup won't choke if you give it bad markup...我想知道为什么有时文档的部分格式不正确时它会给我带来麻烦,以及是否有方法使它恢复到文档的下一个可读部分,而不管这个错误。在
发生错误的行是第三行:
from BeautifulSoup import BeautifulSoup as doc_parser
reader = open(options.input_file, "rb")
doc = doc_parser(reader)
CLI完整输出为:
^{pr2}$
在python3.0之前的python版本中,如果输入中有非ascii字符,就会发生这种情况
如果试图对包含字符值大于128(ANSII&unicode)的字符的字符串使用
str(...)
,则会引发此异常。在在这里,错误可能是因为
getattr
试图在unicode字符串上使用str
它“认为”可以安全地这样做,因为在3.0之前的python版本中,标识符不能包含unicode。在检查HTML中是否有unicode字符。尝试替换/编码这些,如果仍然不起作用,告诉我们。在
是的,如果你有非ASCII名称的元素(
<café>
),它会窒息。对于XML来说,这甚至不是“坏标记”。。。在BeautifulGroup正在使用的
sgmllib
中存在一个缺陷:它试图查找与标记同名的自定义方法,但在Python2中,方法名是字节字符串,因此即使是在中查找不存在非ASCII字符的方法,也会失败。在您可以通过将第259行和第371行从
except AttributeError:
更改为except AttributeError, UnicodeError:
来修复sgmllib,但这并不是一个好的修复。重写方法的其余部分也很重要。在你想分析什么?beauthoulstonesoup的有用性总是有问题的,实际上XML没有HTML那样丰富的可怕的解析器,所以一般来说,损坏的XML不是XML。因此,您通常应该使用普通的旧XML解析器(例如使用标准DOM或etree)。对于解析一般的HTML,
html5lib
是目前您更好的选择。在相关问题 更多 >
编程相关推荐