我想从一个页面获取所有<tr class="**colour blue** attr1 attr2">
。
attrs
每次都不同,其他一些同级<tr>s
有colour red
,colour pink
等类。
所以我要在colour blue
class
之后找到包含在结果中的任何其他字符。我已尝试使用*
,但它不起作用:
soup.find_all('tr', {'class': 'colour blue*'})
谢谢
答案 0 :(得分: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
匹配,只要它具有colours
和blue
类属性。
答案 1 :(得分:1)
使用regex filter:
import re
soup.find_all('tr', class_=re.compile(r'colour blue.+'))
在正则表达式中,它使用re.search()
来查找字符串。
.
表示匹配除换行符之外的任何字符。
+
表示多次匹配.
。