如何从内部带有<span>标记的<dt>中获取文本?

2024-04-25 09:48:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个<dt>标记内提取文本,其中一个<span>在打开www.uszip.com网站公司名称:

下面是我想要得到的一个例子:

<dt>Land area<br><span class="stype">(sq. miles)</span></dt>
<dd>14.28</dd>

我想从标记中取出14.28。这就是我目前的做法:

注:soup是整个网页源代码的beautulsoup版本:

^{pr2}$

但是,这给了我一个

AttributeError: 'NoneType' object has no attribute 'contents'

我试过很多方法,但我不知道该怎么做。此方法适用于此页上的其他一些数据,例如:

<dt>Total population</dt>
<dd>22,234<span class="trend trend-down" title="-15,025 (-69.77% since 2000)">&#9660;</span></dd>

对此使用soup.find("dt",text="Total population").next_sibling.contents[0]返回'22,234'。在

我应该如何首先识别正确的标签,然后从中获取正确的数据?在


Tags: 数据方法标记文本wwwcontentsdttrend
1条回答
网友
1楼 · 发布于 2024-04-25 09:48:12

不幸的是,仅根据所包含的文本,不能同时使用文本和嵌套标记来匹配标记。在

您必须在没有文本的<dt>上循环:

for dt in soup.find_all('dt', text=False):
    if 'Land area' in dt.text:
        print dt.contents[0]

这听起来有悖常理,但这类标记的.string属性是空的,而这正是beauthoulGroup要匹配的。.text包含所有组合的嵌套标记中的所有字符串,并且这些字符串不匹配。在

您还可以使用custom function进行搜索:

^{pr2}$

它基本上对封装在lambda函数中的过滤器进行相同的搜索。在

相关问题 更多 >