我试图使用bs4 / Python 3中的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 :(得分:10)
问题似乎是默认解析器无法正确解析CDATA。如果指定了正确的解析器,CDATA将显示:
soup = BeautifulSoup(txt,'html.parser')
有关解析器的更多信息,请参阅the docs
我使用the diagnose function推荐的the docs进行了此操作:
如果您对Beautiful Soup有疑问或遇到问题,请发送邮件给讨论组。如果您的问题涉及解析HTML文档,请务必提及diagnose()函数对该文档的说明。
使用diagnose()函数可以输出不同解析器如何看到你的html,这使你能够为你的用例选择合适的解析器。