0

我正在使用 BeautifulSoup 从表中提取数据。此表列出了转入/转出子组负责人下的球员,所有这些人都分组在指定他们要去的足球队的“组负责人”下。我想遍历每个团队,然后遍历每个子头(转入/转出),以便我可以根据球员是否在转入或转出中列出来指定组头(团队)为传入或传出团队. 这是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?

更新:

我开始了一个循环来遍历兄弟姐妹,因为每个兄弟姐妹都被两个连续的隔开,尽管它仍然有问题。有没有更简单的方法?我想确保它不会捕获团队或其他子组:

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 回答