使用BeautifulSoup提取CData

问题描述:

我想从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://*.com/questions/2032172/how-can-i-grab-cdata-out-of-beautifulsoup)中找到了类似的代码,这是我认为你得到的地方这个。 –

+0

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

问题似乎是默认的解析器不能正确解析CDATA。如果指定了正确的语法分析器中,CDATA显示出来:

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

有关解析器的更多信息,请参阅the docs

我走上这个使用the diagnose function,其中the docs建议:

如果您有关于美丽汤的问题,或者遇到问题,请将邮件发送给讨论组。如果您的问题涉及解析HTML文档,请务必提及diagnose()函数对该文档的说明。

使用diagnose()函数可以让您输出不同的解析器如何看到您的html,从而使您可以为您的用例选择正确的解析器。

+0

工作。谢谢!很高兴知道诊断。 – user2694306

+0

是的,我过去一直使用bs4,并没有发现诊断。我相信这会为我节省时间。 :) –