我正在使用BeautifulSoup - python模块。我必须找到任何对id的引用,例如:'post-#'。 例如:
<div id="post-45">...</div>
<div id="post-334">...</div>
我该如何过滤?
html = '<div id="post-45">...</div> <div id="post-334">...</div>'
soupHandler = BeautifulSoup(html)
print soupHandler.findAll('div', id='post-*')
> []
答案 0 :(得分:51)
您可以将功能传递给findAll:
>>> print soupHandler.findAll('div', id=lambda x: x and x.startswith('post-'))
[<div id="post-45">...</div>, <div id="post-334">...</div>]
或正则表达式:
>>> print soupHandler.findAll('div', id=re.compile('^post-'))
[<div id="post-45">...</div>, <div id="post-334">...</div>]
答案 1 :(得分:4)
因为他要求匹配“post-#somenumber#”,所以最好精确地使用
import re
[...]
soupHandler.findAll('div', id=re.compile("^post-\d+"))
答案 2 :(得分:1)
soupHandler.findAll('div', id=re.compile("^post-$"))
看起来对我来说。
答案 3 :(得分:0)
这对我有用:
from bs4 import BeautifulSoup
import re
html = '<div id="post-45">...</div> <div id="post-334">...</div>'
soupHandler = BeautifulSoup(html)
for match in soupHandler.find_all('div', id=re.compile("post-")):
print match.get('id')
>>>
post-45
post-334