web-dev-qa-db-ja.com

BeautifulSoupの部分IDのマッチング

私はBeautifulSoupを使用しています。 <div>のような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-*')

どうすればこれをフィルタリングできますか?

25
Max Frai

関数を 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>]
63
Mark Byers

彼は「post-#somenumber#」と一致するように求めているので、正確に

import re
[...]
soupHandler.findAll('div', id=re.compile("^post-\d+"))
4
xiamx
soupHandler.findAll('div', id=re.compile("^post-$"))

私には正しく見えます。

1
Auston

これは私のために働きます:

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