2016-01-06 108 views
3

我想從bs4/Python 3中使用BeautifulSoup來提取CData。但是,每當我使用下面的代碼搜索它時,它都會返回一個空的結果。任何人都可以指出我做錯了什麼?使用BeautifulSoup提取CData

from bs4 import BeautifulSoup,CData 

txt = '''<foobar>We have 
     <![CDATA[some data here]]> 
     and more. 
     </foobar>''' 
soup = BeautifulSoup(txt) 
for cd in soup.findAll(text=True): 
    if isinstance(cd, CData): 
     print('CData contents: %r' % cd) 
+0

在答案[here](http://stackoverflow.com/questions/2032172/how-can-i-grab-cdata-out-of-beautifulsoup)中找到了類似的代碼,這是我認爲你得到的地方這個。 –

+0

可能的重複[可以CDATA部分由BeautifulSoup保存嗎?](http://stackoverflow.com/questions/16426507/can-cdata-sections-be-preserved-by-beautifulsoup) – user985366

回答

10

問題似乎是默認的解析器不能正確解析CDATA。如果指定了正確的語法分析器中,CDATA顯示出來:

soup = BeautifulSoup(txt,'html.parser') 

有關解析器的更多信息,請參閱the docs

我走上這個使用the diagnose function,其中the docs建議:

如果您有關於美麗湯的問題,或者遇到問題,請將郵件發送給討論組。如果您的問題涉及解析HTML文檔,請務必提及diagnose()函數對該文檔的說明。

使用diagnose()函數可以讓您輸出不同的解析器如何看到您的html,從而使您可以爲您的用例選擇正確的解析器。

+0

工作。謝謝!很高興知道診斷。 – user2694306

+0

是的,我過去一直使用bs4,並沒有發現診斷。我相信這會爲我節省時間。 :) –