2017-02-26 137 views
7

我正試圖從頁面獲取所有<tr class="**colour blue** attr1 attr2">Beautifulsoup的相當於'*'是什麼 - find_all?

attrs每次都不一樣,其他兄弟<tr>s有一些colour red,colour pink等類。

所以我正在尋找colour blueclass之後的任何其他字符以包含在結果中。我已經使用*嘗試過,但沒有奏效:

soup.find_all('tr', {'class': 'colour blue*'}) 

謝謝

+0

因此,要清楚,沒有什麼東西*之前*顏色,但任何可以跟隨「藍色」?例如,'color bluegray maxsize tall'會匹配,但'altcolour bluegreen'不會? –

+0

在這種情況下,可能的重複:http://stackoverflow.com/a/16421470/1085062 –

+0

我試過從那裏的解決方案,他們只是返回空列表,由於某種原因 – StevenH

回答

6

您可以使用常見的CSS Selectors與美麗的湯:

>>> soup = BeautifulSoup(''' 
...  <tr class="colour blue attr1 attr2"></tr> 
...  <tr class="colour red attr1 attr2"></tr> 
...  <tr class="unwanted attr1 attr2"></tr> 
...  <tr class="colour blue attr3"></tr> 
...  <tr class="another attr1 attr2"></tr> 
... ''') 
>>> soup.select('tr.colour.blue') 
[<tr class="colour blue attr1 attr2"></tr>, <tr class="colour blue attr3"></tr>] 

tr.colours.blue選擇將匹配tr只要它具有coloursblue類屬性。

+0

工作,謝謝! – StevenH

1

使用regex filter

import re 

soup.find_all('tr', class_=re.compile(r'colour blue.+')) 
  • 在正則表達式,它使用re.search()查找的字符串。

  • .表示匹配除換行符以外的任何字符。

  • +表示匹配.不止一次。

+1

現在你有兩個問題;) – TrakJohnson