Python beautifulsoup属性匹配过多

Python beautifulsoup属性匹配过多,python,beautifulsoup,matching,Python,Beautifulsoup,Matching,Html是这样的: <div class="score header">text i don't want</div><div class="score">text i want</div> 我这样做,bs.finddiv,attrs={class:score},它匹配第一个div标记。我很惊讶bs会这样做。显然我可以做B.findAll…[1]但我认为这是一个太丑陋的解决方案。我如何更恰当地匹配这一点 BeautifulSoup中的类匹配匹配C

Html是这样的:

<div class="score header">text i don't want</div><div class="score">text i want</div>

我这样做,bs.finddiv,attrs={class:score},它匹配第一个div标记。我很惊讶bs会这样做。显然我可以做B.findAll…[1]但我认为这是一个太丑陋的解决方案。我如何更恰当地匹配这一点

BeautifulSoup中的类匹配匹配Class属性中的每个类

要筛选出与所述类匹配更多的元素,可以使用生成器表达式:

next((el for el in bs.find_all("div", attrs={"class":"score"}) if el['class'] == ['score']), None)
这将返回与该类完全匹配的第一个元素,不允许使用其他类。

first同时具有score和header类。如果您想要没有分数的元素,您应该在之后过滤它们

items = soup.find_all(...)
good_items = [item for item in items if 'score' not in item['class']]
当然,过滤条件取决于您想要精确匹配的内容

'score' not in item['class']

请记住,项['class']返回该项拥有的类的列表。因此,如果您想匹配多个类,那么应该使用


BeautifulSoup是一个HTML解析器,因此它将查找包含指定类的类属性。就像CSS规则一样。
['score'] == item['class']
set(['foo', 'bar']) == set(item['class'])