HTML是这样的:beautifulsoup ATTRS匹配太多
<div class="score header">text i don't want</div><div class="score">text i want</div>
我beautifulsoup这样,bs.find( “格”,ATTRS = { “类”: “分数”}),它是匹配第一个div标签。我很惊讶bs是这样做的。显然我可以做bs.findAll(...)[1],但我认为这太难看了。我如何更恰当地匹配这个。
HTML是这样的:beautifulsoup ATTRS匹配太多
<div class="score header">text i don't want</div><div class="score">text i want</div>
我beautifulsoup这样,bs.find( “格”,ATTRS = { “类”: “分数”}),它是匹配第一个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'])
BeautifulSoup是一个HTML解析器,因此它会寻找*含*指定类的类属性。就像CSS规则一样。 – 2013-03-26 17:19:43