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 (€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">€ 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
最初のチームを通過したくないようで、追加の休憩を追加しても機能しません。