Html 是这样的:
<div class="score header">text i don't want</div><div class="score">text i want</div>
我像这样做美丽的汤, bs.find("div", attrs={"class":"score"}) 它匹配第一个 div 标签。我很惊讶 bs 会这样。显然我可以做 bs.findAll(...)[1] 但我认为这是一个太丑陋的解决方案。我如何更正确地匹配这个。
Html 是这样的:
<div class="score header">text i don't want</div><div class="score">text i want</div>
我像这样做美丽的汤, bs.find("div", attrs={"class":"score"}) 它匹配第一个 div 标签。我很惊讶 bs 会这样。显然我可以做 bs.findAll(...)[1] 但我认为这是一个太丑陋的解决方案。我如何更正确地匹配这个。
BeautifulSoup 中的类匹配匹配类属性中的每个类。
要过滤掉与指定类匹配的元素,您可以使用生成器表达式:
next((el for el in bs.find_all("div", attrs={"class":"score"}) if el['class'] == ['score']), None)
这将返回与类完全匹配的第一个元素,不允许其他类。
首先<div>
有两个score
和header
类。如果你想要没有 的元素score
,你应该在之后过滤它们
items = soup.find_all(...)
good_items = [item for item in items if 'score' not in item['class']]
当然,过滤条件取决于您要精确匹配的内容
'score' not in item['class']
或者
['score'] == item['class']
请记住该项目具有的类别的item['class']
回报list
。所以如果你想匹配多个类,那么你应该使用set
set(['foo', 'bar']) == set(item['class'])