提取精确td标签的靓汤

2024-06-02 04:41:28 发布

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

我一直在尝试开始使用BS4,但我似乎遇到了一些麻烦,其中一个表。所以,我有如下内容:

<td align="center" valign="top">
foo
</td>
<td align="center">
foo bar
</td>
<td align="center" class="new" valign="top">bar</td>
<td align="center" class="newq" valign="top">foo</td>

我只想从上面提取<td align="center">。所以,我有一些类似的东西:

^{pr2}$

但这给了我以上4种组合。如何指定只提取<td align="center">(带有foo bar的那个)?如果有人能让我走上正轨,我将不胜感激。。在


Tags: 内容newfootopbarclasstdcenter
2条回答

您不能搜索只具有您指定的属性的所有标记…但是您可以通过指定None作为其值来搜索不具有特定属性的标记。所以:

>>> td_al_center = soup.find_all('td', {'align': 'center', 'valign': None})
>>> td_al_center
[<td align="center">
foo bar
</td>]

假设您的条件是元素a)必须具有align="center",b)不能有任何其他属性,那么在我看来,您必须使用函数作为过滤器。在

def centered_only(tag):
    return len(tag.attrs) == 1 and tag.attrs.get('align') == 'center'

td_al_center = soup.td(centered_only)

http://www.crummy.com/software/BeautifulSoup/bs4/doc/#a-function获取有关作为筛选器的函数的详细信息。在

如您所见,筛选特定属性的值很容易,但我在find_all或标记名速记中没有看到任何可以强制除函数过滤器之外的所有其他属性的缺失。在

相关问题 更多 >