选择所有除在BeautifulSoup中有特定类的div之外的div

2024-03-28 09:18:09 发布

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

正如在this question中所讨论的那样,可以很容易地获得具有特定类的所有div。但是在这里,我有一个要排除的类的列表&希望得到列表中没有给定任何类的所有div。你知道吗

例如

classToIgnore = ["class1", "class2", "class3"]

现在,我们要获取所有不包含上述列表中提到的类的div。我怎样才能做到这一点?你知道吗


Tags: div列表thisquestionclass1class2class3classtoignore
2条回答

使用CSS选择器,尝试以下操作:

divs = soup.select("div:not('.class1, .class2, .class3')")

参考

  1. Link 1
  2. Link 2

替代解决方案

soup.find_all('div', class_=lambda x: x not in classToIgnore)

示例

from bs4 import BeautifulSoup
html = """
<div class="c1"></div>
<div class="c1"></div>
<div class="c2"></div>
<div class="c3"></div>
<div class="c4"></div>
"""
soup = BeautifulSoup(html, 'html.parser')
classToIgnore = ["c1", "c2"]
print(soup.find_all('div', class_=lambda x: x not in classToIgnore))

输出

[<div class="c3"></div>, <div class="c4"></div>]

如果您正在处理嵌套类,那么请尝试使用decompose删除内部不需要的类,然后只使用find_all('div')

for div in soup.find_all('div', class_=lambda x: x in classToIgnore):
    div.decompose()
print(soup.find_all('div'))

这可能会留下一些额外的空间,但你可以很容易地剥离后。你知道吗

相关问题 更多 >