在Beautifulsoup4中找到带有正则表达式的多个单词

时间:2014-04-26 00:20:56

标签: python regex beautifulsoup

我正试图在beautifulsoup4方法中使用find_all()和正则表达式提取这些div

<div class="prod roundedBox">
<div class="prod roundedBox last">

我尝试了不同的可能性,但我无法使用单词 prod roundedBox 来提取标签。我想用两个字!如果我使用其中一个,我会使用其他不需要的标签。

re.compile("prod.roundedBox")
re.compile("prod\sroundedBox.*")

无效。

任何想法!?

2 个答案:

答案 0 :(得分:2)

您只需使用BeautifulSoup即可找到结果。

import bs4

html = '''
<div class="example">example</div>
<div class="prod roundedBox">foo</div>
<div class="prod roundedBox last">bar</div>
'''

soup = bs4.BeautifulSoup(html)
soup(attrs={'class' : ['prod', 'roundedBox']})

如果你想使用正则表达式,这是一个例子:

import re
import bs4

soup = bs4.BeautifulSoup(html)
soup(attrs={'class' : re.compile(r'^prod')}) 

输出

[<div class="prod roundedBox">foo</div>, <div class="prod roundedBox last">bar</div>]

答案 1 :(得分:0)

不需要正则表达式。这就是css选择器的用途。

soup.select('div.prod.roundedBox')

你可以抓住你喜欢的任何属性,上面的内容会抓住课程prodroundedBox。参见:

soup.select('div.prod.roundedBox')
Out[38]: [<div class="prod roundedBox"></div>, <div class="prod roundedBox last"></div>]

soup.select('div.prod.roundedBox.last')
Out[39]: [<div class="prod roundedBox last"></div>]