我一直试图开始使用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
的那个)?如果有人能让我走上正轨,我将非常感激。
答案 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