在Beautifulsoup4中使用正则查找多个词汇
我正在尝试使用 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')
你可以选择你想要的任何属性,上面的代码是用来抓取带有类名 prod
和 roundedBox
的元素。看看这个:
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>]