我在用 BeautifulSoup 解析一些不可靠的 HTML 时遇到了麻烦。结果表明,较新版本中使用的 HTMLParser 比以前使用的 SGMLParser 容错性差。
BeautifulSoup 有某种调试模式吗?我正试图弄清楚如何阻止它在我从一个螃蟹网站加载的一些讨厌的 HTML 上运行:
<HTML>
<HEAD>
<TITLE>Title</TITLE>
<HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
...
...
</BODY>
</HTML>
<HTTP-EQUIV...>
BeautifulSoup 在标记后放弃
In [1]: print BeautifulSoup(c).prettify()
<html>
<head>
<title>
Title
</title>
</head>
</html>
问题显然是 HTTP-EQUIV 标签,它确实是一个非常畸形的<META HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
标签。显然,我需要将此指定为自动关闭,但无论我指定什么,我都无法修复它:
In [2]: print BeautifulSoup(c,selfClosingTags=['http-equiv',
'http-equiv="pragma"']).prettify()
<html>
<head>
<title>
Title
</title>
</head>
</html>
是否有一个详细的调试模式,BeautifulSoup 会告诉我它在做什么,所以我可以弄清楚在这种情况下它把什么当作标签名?