在Beautifulsoup4中使用正则查找多个词汇

0 投票
2 回答
678 浏览
提问于 2025-04-18 04:18

我正在尝试使用 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

其实不需要用正则表达式,这里用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>]
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>]

撰写回答