什么相当于Beautifulsoup的'*' - find_all?

时间:2017-02-26 08:19:52

标签: python beautifulsoup

我想从一个页面获取所有<tr class="**colour blue** attr1 attr2">

attrs每次都不同,其他一些同级<tr>scolour redcolour pink等类。

所以我要在colour blue class之后找到包含在结果中的任何其他字符。我已尝试使用*,但它不起作用:

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

谢谢

2 个答案:

答案 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匹配,只要它具有coloursblue类属性。

答案 1 :(得分:1)

使用regex filter

import re

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

  • .表示匹配除换行符之外的任何字符。

  • +表示多次匹配.