我想选择所有将A和B分别作为类属性的div。
以下选择
soup.findAll('div', class_=['A', 'B'])
然而,选择其类属性中具有EITHER A或B的所有div。类可以有任何顺序的许多其他属性(C,D等),但我想只选择那些同时具有A和B的属性。
答案 0 :(得分:17)
改为使用css selectors
:
soup.select('div.A.B')
答案 1 :(得分:5)
您可以使用CSS选择器,这可能是此处的最佳解决方案。
soup.select("div.classname1.classname2")
你也可以使用一个功能。
def interesting_tags(tag):
if tag.name == "div":
classes = tag.get("class", [])
return "A" in classes and "B" in classes
soup.find_all(interesting_tags)
答案 2 :(得分:2)
table = soup.find_all("tr",class_=["odd","even"])
尝试这种方式!确保您使用的引号和花括号的结构正确。这让我感到困惑。
答案 3 :(得分:1)
1 一些标签,例如:
<span class="A B C D">XXXX</span>
如果要使用CSS选择器获取标签,则可以编写class属性的代码,如下所示:
spans = beautifulsoup.select('span.A.B.C.D')
2 ,如果您想将其用于id属性,请进行以下更改:
<span id="A">XXXX</span>
更改在选择功能中使用的符号:
span = beautifulsoup.select('span#A')
我们了解到它的语法类似于CSS3
答案 4 :(得分:1)
对于最新的BeautifulSoup
,您可以使用regex搜索class
代码:
import re
from bs4 import BeautifulSoup
multipleClassHtml = """
<div class="A B">only A and B</div>
<div class="A B">class contain space</div>
<div class="A B C D">except A and B contain other class</div>
<div class="A C D">only A</div>
<div class="B D">only B</div>
<div class=" D E F">no A B</div>
"""
soup = BeautifulSoup(multipleClassHtml, 'html.parser')
bothABClassP = re.compile("A\s+B", re.I)
foundAllAB = soup.find_all("div", attrs={"class": bothABClassP})
print("foundAllAB=%s" % foundAllAB)
输出:
foundAllAB=[<div class="A B">only A and B</div>, <div class="A B">class contain space</div>, <div class="A B C D">except A and B contain other class</div>]