Соответствующие идентификаторы в BeautifulSoup - PullRequest
19 голосов
/ 14 мая 2010

Я использую BeautifulSoup - модуль Python. Я должен найти любую ссылку на 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-*')
> []

Ответы [ 4 ]

51 голосов
/ 14 мая 2010

Вы можете передать функцию в 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>]
4 голосов
/ 14 января 2013

Так как он просит соответствовать "post- # somenumber #", лучше уточнить с

import re
[...]
soupHandler.findAll('div', id=re.compile("^post-\d+"))
1 голос
/ 14 мая 2010
soupHandler.findAll('div', id=re.compile("^post-$"))

смотрит прямо на меня.

0 голосов
/ 09 марта 2015

Это работает для меня:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...