在BeautifulSoup中匹配部分ID
我正在使用BeautifulSoup这个工具。我需要找到所有带有类似于post-#
的id的<div>
标签。
比如说:
<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 个回答
3
这个对我有效:
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
7
因为他想要匹配“post-#某个数字#”,所以最好用更具体的方式来处理。
import re
[...]
soupHandler.findAll('div', id=re.compile("^post-\d+"))
85
你可以把一个函数传递给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>]