1

次の一般的な形式を持つ BeautifulSoup を使用してページをスクレイピングしようとしています。

<span class="ID1"> TEXT </span>
<span class="ID2"> TEXT2 </span>

これらはすべて に格納される<div>ため、一般的なコード テンプレートは次のようになります。

for tag in soup.find_all('div'):
    print tag.find('span')

これにより、 内のすべての<span>タグが表示されますdivが、 内を検索する方法がわかりません<span>stag.find('class')、 、 などを試しまし.find('ID')たが、うまくいきません。

オブジェクトのこの文字列表現を取得し、探している ID があるかどうかをテストすることで、探しているものを手動で見つけることができますが、それは応急処置のようです。私が見ていないだけのものがあると確信しています。

find注: ID の正規表現を関数 alaに渡すことも試みました。

for tag in soup.find_all('div'):
    print tag.find(re.compile('id2'))

残念ながらまだ運がありません。

では、特定のクラス値を検索するにはどうすればよいでしょうか。

*EDIT [解決済み]


find辞書構造を手動でチェックせずに、BeautifulSoup の組み込み関数を使用してそれを行う方法を見つけました。

この関数を使用して html タグ内のfind特定のタグを選択するにはclass=value、検索する一般的なタグ名を最初のパラメーターとして渡します (私の場合、それは '' タグの一部でした)。2 番目の引数として、検索する特定の辞書を渡し'class' : 'value'ます。

たとえば、スクレイピングしたい HTML が次のような場合:

<div>
    <span class="ID1"> TEXT </span>
    <other HTML junk> 
    <span class="ID2"> TEXT2 </span>
</div>

以下のようなステートメントを使用できます。

for tag_elm in soup.find_all('div'):
    print tag_elm.find('span', {'class' : 'ID2'})

多田!

4

1 に答える 1

3

これは機能するはずです:

for tag in soup.findAll('span'):
    if tag.has_key('class'):
        if tag['class'] == 'ID2':
            # do stuff

このコードをテストしました:

from BeautifulSoup import BeautifulSoup

text = '''
<span class="ID1"> TEXT </span>
<span class="ID2"> TEXT2 </span>
'''

soup = BeautifulSoup(text)

for tag in soup.findAll('span'):
    if tag.has_key('class'):
        if tag['class'] == 'ID2':
            print tag.string
            break

次の出力が得られます。

TEXT2
于 2012-12-18T23:17:54.403 に答える