我认为BeautifulSoup将能够处理格式错误的文档,但是当我发送页面的来源时,会打印下面的回溯:
Traceback (most recent call last):
File "mx.py", line 7, in
s = BeautifulSoup(content)
File "build\bdist.win32\egg\BeautifulSoup.py", line 1499, in __init__
File "build\bdist.win32\egg\BeautifulSoup.py", line 1230, in __init__
File "build\bdist.win32\egg\BeautifulSoup.py", line 1263, in _feed
File "C:\Python26\lib\HTMLParser.py", line 108, in feed
self.goahead(0)
File "C:\Python26\lib\HTMLParser.py", line 150, in goahead
k = self.parse_endtag(i)
File "C:\Python26\lib\HTMLParser.py", line 314, in parse_endtag
self.error("bad end tag: %r" % (rawdata[i:j],))
File "C:\Python26\lib\HTMLParser.py", line 115, in error
raise HTMLParseError(message, self.getpos())
HTMLParser.HTMLParseError: bad end tag: u"", at line 258, column 34
它不应该能够处理这种东西吗?如果它可以处理它们,我怎么能这样做?如果没有,是否有可以处理格式错误的文档的模块?
编辑:这是一个更新。我使用firefox在本地保存了页面,我尝试从文件的内容创建一个汤对象。这就是BeautifulSoup失败的地方。如果我尝试直接从网站创建一个汤对象,它就会起作用。Here's导致汤麻烦的文件。答案 0 :(得分:5)
使用BeautifulSoup 3.0.7版为我工作得很好。最新的是3.1.0,但是如果你遇到麻烦,可以在BeautifulSoup主页上注意尝试3.0.7a。我想我和你的问题遇到了类似的问题并且还原了,这解决了问题;我试试看。
如果您想坚持使用当前版本,我建议删除顶部的大<script>
块,因为这是发生错误的地方,因为无论如何都无法使用BeautifulSoup解析该部分。
答案 1 :(得分:1)
根据我的经验,BeautifulSoup不是容错的。我不得不使用它一次用于一个小脚本并遇到这些问题。我认为使用正则表达式来删除标签有点帮助,但我最终放弃并将脚本移动到Ruby和Nokogiri。
答案 2 :(得分:1)
问题似乎是
contents = contents.replace(/</g, '<');
在258行加上类似的
contents = contents.replace(/>/g, '>');
在下一行。
我只是使用re.sub来破坏所有出现的r“替换(/ [&lt;&gt;] /”之前带有一些无害的东西,然后再将它送到BeautifulSoup ...离开BeautifulSoup就像扔掉了宝贝,洗澡水恕我直言。