Beautifulsoup多类选择器

时间:2016-10-28 12:59:58

标签: python beautifulsoup

我想选择所有将A和B分别作为类属性的div。

以下选择

soup.findAll('div', class_=['A', 'B'])
然而,

选择其类属性中具有EITHER A或B的所有div。类可以有任何顺序的许多其他属性(C,D等),但我想只选择那些同时具有A和B的属性。

5 个答案:

答案 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>]

vscode debug bs4