要使用BeautifulSoup按包含一个类但不包含另一个类进行过滤,可以结合使用CSS选择器和Python的列表推导式。以下是一个示例代码:
from bs4 import BeautifulSoup
html = """
This div has class1
This div has class2
This div has both class1 and class2
This div has class3
"""
soup = BeautifulSoup(html, 'html.parser')
# 使用CSS选择器选中包含class1但不包含class2的div元素
filtered_divs = [div for div in soup.select('div.class1') if 'class2' not in div['class']]
# 输出结果
for div in filtered_divs:
print(div.text.strip())
输出结果为:
This div has class1
在上述代码中,首先使用CSS选择器选中所有包含class1的div元素,然后使用列表推导式筛选出不包含class2的div元素。最后,遍历筛选后的结果并输出其文本内容。