2012-07-24 45 views
0

我使用BeautifulSoup從表格中提取數據。這張表中的球員列出了Transfers In/Transfers Out小組負責人的名單,所有這些球員都被歸類爲一個「小組組長」,指明他們將要參加的橄欖球隊。我想循環遍歷每個團隊,並隨後遍歷每個小組負責人(轉入/轉出),以便根據球員是否列入轉入或轉出,將我的團隊負責人(團隊)指定爲傳入球隊或傳出球隊。下面是HTML:如何使用BeautifulSoup在Python中的子組頭之間提取數據?

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

我將通過分組頭類重複獲取數據,但這樣我就可以不看標籤下面的數據tr標籤與每個子組結束。我試圖讓輸出與此格式的詞典:

{播放器:爲了團隊,從團隊,價格,日期]}

如何搶HTML?

UPDATE:

我開始一個循環,通過兄弟姐妹來迭代,因爲每一個被連續兩次的人隔開,但它仍然有問題。有更容易的方法嗎?我想,以確保它不會趕上球隊或其他亞類:

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 

它似乎並不想過去的一線隊,並增加額外的休息不工作。

回答

1

您可以找到<tr>標籤與subgroup-head類,然後使用next_sibling接線員給下一行。然後深入瞭解元素並獲取所需的信息。

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

並從這裏獲取您需要的信息。

+0

如果每個子羣只有一個玩家,那麼這將起作用,但是每個區域都有多個玩家,所以它無法遍歷所有這些玩家。我試圖看看我是否可以打電話給next_sibling.next_sibling,直到它達到另一個子組頭... – user1549620 2012-07-24 20:12:39

+0

@ user1549620它看起來像每個玩家都在一排,所以你只需要遍歷next_sibling尋找標籤。在循環中應該是直截了當的。 – Ansari 2012-07-24 20:19:28

相關問題