我在用BeautifulSoup解析一些狡猾的HTML时遇到了麻烦。事实证明,在较新版本中使用的HTMLParser比以前使用的SGMLParser具有更小的容错性。BeautifulSoup 3.1解析器太容易打破
BeautifulSoup有某种调试模式吗?我试图找出如何阻止它borking一些讨厌的HTML我从倔网站加载:
<HTML>
<HEAD>
<TITLE>Title</TITLE>
<HTTP-EQUIV="PRAGMA" CONTENT="NO-CACHE">
</HEAD>
<BODY>
...
...
</BODY>
</HTML>
BeautifulSoup的<HTTP-EQUIV...>
标签
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会告诉我它在做什么,所以在这种情况下,我可以弄清楚它作为标签名称是什么?
我有Python 2.5.1和BeautifulSoup 3.1.0.1。原始的破碎结构是不同的,但问题也出现在问题的简化结构中。我刚刚在您的示例中运行了代码,并且遇到了与以前相同的问题,在之后没有任何问题。现在我真的很困惑! – Mat 2009-01-19 23:49:26