美丽的汤提取精确的标签

时间:2013-10-25 19:44:50

标签: python python-2.7 beautifulsoup

我一直试图开始使用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">。所以,我有类似的东西:

td_al_center = soup.find_all('td',{'align':'center'})

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

2 个答案:

答案 0 :(得分:1)

假设您的标准是元素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中的任何内容或标签名称的简写,除了功能之外还可以强制缺少所有其他属性过滤

答案 1 :(得分:1)

您无法搜索所有仅包含您指定属性的标记...但您可以通过指定{ 搜索不具备特定属性的标记{1}}作为它的值。所以:

None