5

Beautiful Soupを使用して特定のdivタグを引き出していますが、単純な文字列照合を使用できないようです。

このページには、次の形式のタグがいくつかあります。

<div class="comment form new"...> 

これは無視したいのですが、いくつかのタグも

<div class="comment comment-xxxx..."> 

ここで、xは任意の長さの整数を表し、省略記号は空白で区切られた任意の数の他の値を表します(私は気にしません)。特にPythonのreクラスを使用したことがないため、正しい正規表現を理解できません。

使用する

soup.find_all(class_="comment") 

コメントという単語で始まるすべてのタグを検索します。使ってみました

soup.find_all(class_=re.compile(r'(comment)( )(comment)'))
soup.find_all(class_=re.compile(r'comment comment.*'))

と他の多くのバリエーションがありますが、正規表現またはmatch()がどのように機能するかについてここで明らかな何かが欠けていると思います。誰かが私を助けることができますか?

4

1 に答える 1

15

私はそれを持っていると思います:

>>> [div['class'] for div in soup.find_all('div')]
[['comment', 'form', 'new'], ['comment', 'comment-xxxx...']]

BS3の同等のものとは異なり、これではないことに注意してください。

['comment form new', 'comment comment-xxxx...']

そして、それがあなたの正規表現が一致しない理由です。

しかし、あなたは、例えば、これを一致させることができます:

>>> soup.find_all('div', class_=re.compile('comment-'))
[<div class="comment comment-xxxx..."></div>]

re.searchBSは、ではなく、と同等の機能re.matchを実行するため、は必要ありません'comment-.*'。もちろん、一致させたい'comment-12345'が望まない'comment-of-another-kind場合、たとえば'comment-\d+'

于 2012-12-10T03:50:00.953 に答える