2013-03-26 79 views
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],但我認爲這太難看了。我如何更恰當地匹配這個。

+0

BeautifulSoup是一個HTML解析器,因此它會尋找*含*指定類的類屬性。就像CSS規則一樣。 – 2013-03-26 17:19:43

回答

0

BeautifulSoup中的類匹配匹配/類屬性中的類。

爲了濾除匹配比規定的類元素,可以使用信號發生器表達式:

next((el for el in bs.find_all("div", attrs={"class":"score"}) if el['class'] == ['score']), None) 

這返回該類沒有其它類完全匹配第一元件允許。

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'])