gpt4 book ai didi

python - Beautiful Soup 引发 UnicodeEncodeError "ordinal not in range(128)"

转载 作者:太空狗 更新时间:2023-10-30 01:30:10 27 4
gpt4 key购买 nike

我正在尝试解析从野外网络下载的任意文档,是的,我无法控制它们的内容。

Beautiful Soup won't choke if you give it bad markup...我想知道为什么有时候文档的部分格式不正确时它会给我带来这些麻烦,以及是否有办法让它恢复到文档的下一个可读部分,而不管这个错误.

发生错误的行是第3行:

from BeautifulSoup  import BeautifulSoup as doc_parser
reader = open(options.input_file, "rb")
doc = doc_parser(reader)

CLI 完整输出为:

Traceback (most recent call last):
File "./grablinks", line 101, in <module>
sys.exit(main())
File "./grablinks", line 88, in main
links = grab_links(options)
File "./grablinks", line 36, in grab_links
doc = doc_parser(reader)
File "/usr/local/lib/python2.7/dist-packages/BeautifulSoup.py", line 1519, in __init__
BeautifulStoneSoup.__init__(self, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/BeautifulSoup.py", line 1144, in __init__
self._feed(isHTML=isHTML)
File "/usr/local/lib/python2.7/dist-packages/BeautifulSoup.py", line 1186, in _feed
SGMLParser.feed(self, markup)
File "/usr/lib/python2.7/sgmllib.py", line 104, in feed
self.goahead(0)
File "/usr/lib/python2.7/sgmllib.py", line 143, in goahead
k = self.parse_endtag(i)
File "/usr/lib/python2.7/sgmllib.py", line 320, in parse_endtag
self.finish_endtag(tag)
File "/usr/lib/python2.7/sgmllib.py", line 358, in finish_endtag
method = getattr(self, 'end_' + tag)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 15-16: ordinal not in range(128)

最佳答案

是的,如果你有非 ASCII 名称的元素(<café>),它会窒息。对于 XML,这甚至不是“错误的标记”...

这是 sgmllib 中的错误BeautifulSoup 正在使用:它试图找到与标签同名的自定义方法,但在 Python 2 中,方法名称是字节字符串,因此即使寻找具有非 ASCII 字符的方法,它也会永远不会出现,失败。

您可以通过更改 except AttributeError: 中的第 259 和 371 行来破解 sgmllib 的修复程序至 except AttributeError, UnicodeError:但这并不是一个好的解决方法。重写方法的其余部分也很重要。

您要解析的是什么? BeautifulStoneSoup 的实用性总是值得怀疑 — XML 不像 HTML 那样拥有丰富的可怕的解析器技巧,因此通常损坏的 XML 不是 XML。因此,您通常应该使用普通的旧 XML 解析器(例如,使用标准 DOM 或 etree)。用于解析一般 HTML,html5lib是您现在更好的选择。

关于python - Beautiful Soup 引发 UnicodeEncodeError "ordinal not in range(128)",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8629792/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com