1

我认为 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 失败的地方。如果我尝试直接从网站创建一个汤对象,它可以工作。这是给汤带来麻烦的文件。

4

3 回答 3

5

使用 BeautifulSoup 3.0.7 版对我来说效果很好。最新的是 3.1.0,但是如果遇到问题,BeautifulSoup 主页上有一条说明可以尝试 3.0.7a。我想我前段时间遇到了与您类似的问题并恢复,从而解决了问题;我会试试的。

如果您想坚持使用当前版本,我建议您删除<script>顶部的大块,因为这是发生错误的地方,并且无论如何您都无法使用 BeautifulSoup 解析该部分。

于 2009-07-10T23:52:26.320 回答
1

以我的经验,BeautifulSoup 并没有那么容错。我不得不将它用于一个小脚本并遇到这些问题。我认为使用正则表达式去除标签会有所帮助,但我最终放弃并将脚本移至 Ruby 和 Nokogiri。

于 2009-07-10T20:25:16.767 回答
1

问题似乎是第258 行加上 下一行中
contents = contents.replace(/</g, '&lt;');
的类似内容。
contents = contents.replace(/>/g, '&gt;');

在将其喂给 BeautifulSoup 之前,我会使用 re.sub 将所有出现的 r"replace(/[<>]/" 用一些无害的东西来破坏......离开 BeautifulSoup 就像用洗澡水把婴儿扔掉恕我直言.

于 2009-07-11T01:51:12.643 回答