美丽的汤 - 选择所有具有类的元素,但如果它们还有其他类,也将它们分开或忽略元素

我有以下结构:


<div class="alpha">

<div class="alpha">

<div class="alpha">

<div class="alpha betha">

<div class="alpha gama">

<div class="alpha">

我需要

  1. 获取列表中只有“alpha”作为类的所有元素。

  2. 在另一个列表中获取所有具有 'alpha' 和 'betha' 的元素。

  3. 忽略其他组合,如“alpha gama”。

我知道我可以获得所有具有类的元素

container.findAll('div', {'class': 'alpha'})

但是如何区分/忽略 2 和 3。


慕婉清6462132
浏览 103回答 2
2回答

缥缈止盈

您可以通过以下方法使用 CSS 选择器.select():txt = '''<div class="alpha">1</div><div class="alpha">2</div><div class="alpha">3</div><div class="alpha betha">4</div><div class="betha alpha">5</div><div class="alpha betha gama">6</div><div class="alpha gama">7</div><div class="alpha">8</div>'''from bs4 import BeautifulSoupsoup = BeautifulSoup(txt, 'html.parser')only_alpha = soup.select('[class="alpha"]')only_alpha_betha = soup.select('.alpha.betha:not(.gama)')print('Only alpha:', only_alpha)print('Only alpha and betha:', only_alpha_betha)印刷:Only alpha: [<div class="alpha">1</div>, <div class="alpha">2</div>, <div class="alpha">3</div>, <div class="alpha">8</div>]Only alpha and betha: [<div class="alpha betha">4</div>, <div class="betha alpha">5</div>]

PIPIONE

为什么不创建一个辅助函数?bs4 允许您在使用find_all()a function as filter搜索树时指定。从文档:如果其他匹配项都不适合您,请定义一个将元素作为唯一参数的函数。True 如果参数匹配,则函数应返回,False否则返回。问题是我们不能传递任何其他参数(在这种情况下是有效类的列表)。我们可以通过使用包装函数来动态创建过滤器来克服这个问题。def create_filter(tag_name, class_list):&nbsp; &nbsp; def class_filter(tag):&nbsp; &nbsp; &nbsp; &nbsp; return (&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; tag.name == tag_name and&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; set(tag.get('class', [])) == set(class_list)&nbsp; &nbsp; &nbsp; &nbsp; )&nbsp; &nbsp; return class_filter让我们看看这在 @AndrejKesely 的示例 html 上是如何工作的。仅有的alphaprint(soup.find_all(create_filter('div', ['alpha'])))输出[<div class="alpha">1</div>, <div class="alpha">2</div>, <div class="alpha">3</div>, <div class="alpha">8</div>]只有alpha和bethaprint(soup.find_all(create_filter('div', ['alpha', 'betha'])))输出[<div class="alpha betha">4</div>, <div class="betha alpha">5</div>]
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python