2013-01-04 302 views
0

這裏是HTML內容:混淆使用BeautifulSoup讀取html表格內容?

<table cellspacing="1" cellpadding="0" class="data"> 
<tr class="colhead"> 
      <th colspan="3">Expression</th> 
     </tr> 
     <tr class="colhead"> 
      <th>Task</th> 
      <th>Action</th> 
      <th>List</th> 
</tr>   
<tr class="rowLight"> 
    <td width="40%"> 
      Task1 
     </td> 
     <td width="20%"> 
      Assigned to 
     </td> 
     <td width="40%"> 
      Harry 
    </td> 

</tr>   
<tr class="rowDark"> 
    <td width="40%"> 
        Task2 
       </td> 
       <td width="20%"> 
        Rejected by 
       </td> 
       <td width="40%"> 
        Lopa 
       </td> 
</tr> 

<tr class="rowLight"> 
    <td width="40%"> 
      Task5 
     </td> 
     <td width="20%"> 
      Accepted By 
     </td> 
     <td width="40%"> 
      Mathew 
     </td> 
</tr> 

現在我得爲以下值:(如下表只不過是Excel表格,我將建立,一旦達到該值。)

Task Action  List 
Task1 Assigned to Harry 
Task2 Rejected by Lopa 
Task5 Accepted By Mathew 

一個世俗的人解我所知道的,如下:

from bs4 import BeautifulSoup 
    soup = BeautifulSoup(source_URL) 

alltables = soup.findAll("table", {"border":"2", "width":"100%"}) 

t = [x for x in soup.findAll('td')] 

[x.renderContents().strip('\n') for x in t] 

但在我上面HTML內容,結構不存在,那麼如何處理?請在這裏指導我!

+0

任何人都可以幫助我嗎? –

回答

2

使用.stripped_strings獲取某個錶行的「有趣」的文字:

rows = table.find_all('tr', class_=('rowLight', 'rowDark')) 
for row in rows: 
    print list(row.stripped_strings) 

此輸出:

[u'Task1', u'Assigned to', u'Harry'] 
[u'Task2', u'Rejected by', u'Lopa'] 
[u'Task5', u'Accepted By', u'Mathew'] 

,或者拉一切都變成列表中的一個列表(由請求,不包括最後一行):

data = [list(r.stripped_strings) for r in rows[:-1]] 

成爲:

data = [[u'Task1', u'Assigned to', u'Harry'], [u'Task2', u'Rejected by', u'Lopa']] 

.find_all()結果,一個ResultSet,行爲就像一個Python列表,你可以隨意切它忽略某些行,例如。

+0

Woowwwwwww ............你就像我的'Pyhton-bs-4'神! Okie這裏有一件事我忘了提到,這就是 - (a)'我不想翻到桌子的最後一排,只有'最後一排-2'。那麼該怎麼做? (b)如果我想得到每個列表的值,哪種方式可以這樣做? –

+0

上面說的可能嗎? @Martijin –

+1

'rows'列表就像​​其他列表一樣;你可以切片:'rows [: - 1]'。要將這一切轉換爲列表列表,請在行[: - 1]]中執行'data = [list(r.stripped_strings)r'。 –