Python 美丽的汤提取准确的td标签
我一直在尝试开始使用BS4,但我似乎在使用其中一个表时遇到了一些问题。因此,我有如下几点:Python 美丽的汤提取准确的td标签,python,python-2.7,beautifulsoup,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" val
<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>
但这给了我以上4种组合。如何指定仅提取
(带有foo-bar
的代码)?如果有人能把我放在正确的轨道上,我将不胜感激。假设您的标准是元素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)
有关作为筛选器的函数的详细信息
如您所见,很容易根据特定属性的值进行筛选,但是我在
find_all
或标记名速记中没有看到任何东西可以强制执行除功能过滤器之外的所有其他属性的缺失。您无法搜索所有仅具有您指定的属性的标记…但您可以搜索没有特定属性的标记,通过指定None
作为其值。因此:
>>> td_al_center = soup.find_all('td', {'align': 'center', 'valign': None})
>>> td_al_center
[<td align="center">
foo bar
</td>]
td_al_center=soup.find_all('td',{'align':'center','valign':None})
>>>德乌阿卢中心
[
富吧
]
试试
汤。查找所有('td',{'class':'new'})
@SivaCn:为什么?这显然不会返回他想要的那个。@abarnert它工作得很好(Python2.7)soup.findAll('td',{'class':'new'})
,这是一个坏主意,因为可能有几个标记与之关联,所以通过使用诸如align=“center”
之类的公共参数进行过滤。@SivaCn:不。他想找到第二个标签,带“foo-bar”的标签。您将找到第三个标签,即带有“bar”的标签。没有明显的方法来调整你正在做的事情,以找到他想要的事实上,这正是他所要求的。在这种情况下,这不是必要的,但这是问题和所有相关问题的最普遍的解决方案。太棒了——这正是我想要的。谢谢你这么做。浪费了2个小时寻找如何做到这一点!
>>> td_al_center = soup.find_all('td', {'align': 'center', 'valign': None})
>>> td_al_center
[<td align="center">
foo bar
</td>]