在BeautifulSoup中匹配id

时间:2010-05-13 21:42:23

标签: python beautifulsoup

我正在使用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-*')
> []

4 个答案:

答案 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