Соответствие частичных идентификаторов в BeautifulSoup
Я использую BeautifulSoup. Я должен найти любую ссылку на теги <div>
с таким идентификатором, как: 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-*')
Как я могу отфильтровать это?
Ответы
Ответ 1
Вы можете передать функцию 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>]
Ответ 2
Поскольку он просит сопоставить "post-# somenumber #", лучше уточнить с помощью
import re
[...]
soupHandler.findAll('div', id=re.compile("^post-\d+"))
Ответ 3
soupHandler.findAll('div', id=re.compile("^post-$"))
смотрит прямо на меня.
Ответ 4
Это работает для меня:
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