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]但我认为这太难看了解决方案。我如何更恰当地匹配它。
答案 0 :(得分:0)
BeautifulSoup中的类匹配匹配class属性中的 per 类。
要过滤掉与 more 匹配的元素,您可以使用生成器表达式:
next((el for el in bs.find_all("div", attrs={"class":"score"}) if el['class'] == ['score']), None)
这将返回完全匹配 类的第一个元素,而不允许其他类。
答案 1 :(得分:0)
首先<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'])