在BeautifulSoup中匹配id

Max*_*rai 23 python beautifulsoup

我正在使用BeautifulSoup - python模块.我必须找到任何对id的引用,例如:'post-#'.例如:

<div id="post-45">...</div>
<div id="post-334">...</div>
Run Code Online (Sandbox Code Playgroud)

我该如何过滤?

html = '<div id="post-45">...</div> <div id="post-334">...</div>'
soupHandler = BeautifulSoup(html)
print soupHandler.findAll('div', id='post-*')
Run Code Online (Sandbox Code Playgroud)

Mar*_*ers 58

您可以将函数传递给findAll:

>>> print soupHandler.findAll('div', id=lambda x: x and x.startswith('post-'))
[<div id="post-45">...</div>, <div id="post-334">...</div>]
Run Code Online (Sandbox Code Playgroud)

或正则表达式:

>>> print soupHandler.findAll('div', id=re.compile('^post-'))
[<div id="post-45">...</div>, <div id="post-334">...</div>]
Run Code Online (Sandbox Code Playgroud)

  • 我修复了`AttributeError`. (2认同)

xia*_*amx 7

由于他要求匹配“post-#somenumber#”,因此最好精确地使用

import re
[...]
soupHandler.findAll('div', id=re.compile("^post-\d+"))
Run Code Online (Sandbox Code Playgroud)