0

BeautifulSoup を使用してテーブルからデータを抽出しています。このテーブルには、移籍先/移籍先のサブグループ ヘッドの下にリストされているプレーヤーがあり、それらはすべて、彼らが行くフットボール チームを指定する「グループ ヘッド」の下にグループ化されています。各チーム、続いて各サブヘッド (Transfers in/out) を反復処理して、プレーヤーが Transfers in または out にリストされているかどうかに基づいて、グループヘッド (チーム) を次のチームまたは次のチームとして指定できるようにします。 . html は次のとおりです。

<tr class="group-head">
    <th colspan="4"><h3><a href="/teams/england/arsenal-fc/">Arsenal</a></h3></th>
</tr>

    <tr class="subgroup-head">
        <th colspan="4">Transfers in (&euro;25.5M)</th>
    </tr>

    <tr class="odd">
        <td class="date"><span class='timestamp' data-value='1341093600' data-    format='mm/dd/yy'>07/01/12</span></td>
    <td class="player"><span class="flag_16 left_16 france_16_left"></span>O. Giroud</td>
    <td class="team">Montpellier</td>

    <td class="type">&euro; 12M</td>
  </tr>

データを取得するために subgroup-head クラスを反復処理しますが、tr タグは各サブグループで終了するため、タグの下のデータを見ることができません。取得しようとしている出力は、次の形式の辞書です。

{プレーヤー: [チームへ、チームから、価格、日付]}

どうすればhtmlを取得できますか??

アップデート:

まだ問題はありますが、それぞれが2つの連続するものによって間隔が空けられているため、兄弟を反復処理するループを開始しました。もっと簡単な方法はありますか?チームや他のサブグループをキャッチしないようにしたい:

teams = table.findAll('tr', {'group-head'})
inout = table.findAll('tr', {'subgroup-head'})

for team in teams:
  for direction in inout:
    details = direction.next_sibling.next_sibling
    print details.text.encode('utf-8')
    while details.next_sibling.next_sibling:
      if details.next_sibling.next_sibling not in inout:
        if details.next_sibling.next_sibling not in teams:
          print 'NEXT ONE'
          details = details.next_sibling.next_sibling
          print details.text.encode('utf-8')
        else:
          break

最初のチームを通過したくないようで、追加の休憩を追加しても機能しません。

4

1 に答える 1

1

<tr>class でタグを見つけ、演算子をsubgroup-head使用して次の行を取得できます。next_sibling次に、要素をドリルダウンして、必要な情報を取得します。

soup = BeautifulSoup(html)
subgrouphead = soup.find('tr', 'subgroup-head')
details = subgrouphead.next_sibling.next_sibling

そして、ここから必要な情報を入手してください。

于 2012-07-24T19:39:43.240 に答える