Ответ 1
Вместо этого используйте css selectors
:
soup.select('div.A.B')
Я хочу выбрать все div, которые имеют BOTH A и B как атрибуты класса.
Следующий выбор
soup.findAll('div', class_=['A', 'B'])
однако выбирает все divs, которые имеют A или или B в своих атрибутах класса. Классы могут иметь много других атрибутов (C, D и т.д.) В любом порядке, но я хочу выбрать только те, у которых есть A и B.
Вместо этого используйте css selectors
:
soup.select('div.A.B')
Вместо этого вы можете использовать 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)
1 некоторые теги вроде:
<span class="A B C D">XXXX</span>
если вы хотите использовать селектор CSS для получения тега, вы можете написать код для атрибута класса следующим образом:
spans = beautifulsoup.select('span.A.B.C.D')
2 И если вы хотите использовать это для атрибута id, измените его следующим образом:
<span id="A">XXXX</span>
измените символ, который вы используете в функции выбора:
span = beautifulsoup.select('span#A')
Что мы узнали, так это то, что его грамматика похожа на CSS3