我有一个我正在抓的网站,其结构如下.我希望能够从CData块中获取信息.
我正在使用BeautifulSoup从页面中提取其他信息,所以如果解决方案可以使用它,那将有助于保持我的学习曲线,因为我是一个python新手.具体来说,我想了解隐藏在CData语句中的两种不同类型的数据.第一个只是文本我很确定我可以抛出一个正则表达式并得到我需要的东西.对于第二种类型,如果我可以将具有html元素的数据放入其自己的beautifulsoup中,我可以解析它.
我只是在学习python和beautifulsoup,所以我正在努力寻找能让我自己获得CData的魔法咒语.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>
Cows and Sheep
</title>
</head>
<body>
<div id="main">
<div id="main-precontents">
<div id="main-contents" class="main-contents">
<script type="text/javascript">
//<![CDATA[var _ = g_cow;_[7654]={cowname_enus:'cows rule!',leather_quality:99,icon:'cow_level_23'};_[37357]={sheepname_enus:'baa breath',wool_quality:75,icon:'sheep_level_23'};_[39654].cowmeat_enus = '<table><tr><td><b class="q4">cows rule!</b><br></br>
<!--ts-->
get it now<table width="100%"><tr><td>NOW</td><th>NOW</th></tr></table><span>244 Cows</span><br></br>67 leather<br></br>68 Brains
<!--yy-->
<span class="q0">Cow Bonus: +9 Cow Power</span><br></br>Sheep Power 60 / 60<br></br>Sheep 88<br></br>Cow Level 555</td></tr></table>
<!--?5695:5:40:45-->
';
//]]>
</script>
</div>
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用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)
Run Code Online (Sandbox Code Playgroud)