正如this question中所讨论的,可以很容易地获得具有特定类的所有div
。但是在这里,我有一个要排除的类列表,并希望获得列表中没有任何类的所有div。
对于
classToIgnore = ["class1", "class2", "class3"]
现在要获取不包含上面列出的类的所有div。我该如何实现?
答案 0 :(得分:3)
答案 1 :(得分: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'))
这可能会留下一些额外的空间,但是您以后可以轻松将其剥离。