Skip to main content
 首页 » 编程设计

python之为什么 BeautifulSoup 会抛出这个 HTMLParseError

2025年05月04日15飞鱼

我原以为 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 将页面保存在本地,并尝试从文件的内容创建一个 soup 对象。这就是 BeautifulSoup 失败的地方。如果我尝试直接从网站创建一个 soup 对象,它就可以工作。 Here's给 soup 带来麻烦的文件。

请您参考如下方法:

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

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