BeautifulSoup4:选择属性不等于x的元素

18 投票
2 回答
10854 浏览
提问于 2025-04-18 07:16

我想做这样的事情:

soup.find_all('td', attrs!={"class":"foo"})

我想找到所有没有类名为 foo 的 td 标签。
显然,上面的写法不行,那该怎么写呢?

2 个回答

4

有一个方法叫做 .select(),它可以让你把CSS选择器作为字符串传进去:

soup.select('td:not(.foo)')

上面的代码会返回所有不属于 foo 类的 <td> 标签。

26

BeautifulSoup 真的让“汤”变得美丽且易于使用。

你可以在属性值中 传递一个函数

soup.find_all('td', class_=lambda x: x != 'foo')

示例:

>>> from bs4 import BeautifulSoup
>>> data = """
... <tr>
...     <td>1</td>
...     <td class="foo">2</td>
...     <td class="bar">3</td>
... </tr>
... """
>>> soup = BeautifulSoup(data)
>>> for element in soup.find_all('td', class_=lambda x: x != 'foo'):
...     print element.text
... 
1
3

撰写回答