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