我在用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