2010-09-16 78 views
0

我有一个HTML表格,我试图从中解析信息。但是,有些表跨越多行/列,所以我想要做的就是使用像BeautifulSoup这样的表来将表解析为某种类型的Python结构。我想只是用一个列表的列表,所以我会变成类似BeautifulSoup或正则表达式的HTML表格到数据结构?

<tr> 
    <td>1,1</td> 
    <td>1,2</td> 
</tr> 
<tr> 
    <td>2,1</td> 
    <td>2,2</td> 
</tr> 

[['1,1', '1,2'], 
['2,1', '2,2']] 

这一点我(觉得)应该是相当简单的。但是,由于某些单元格跨越多行/列,因此会有一些轻微的复杂性。另外还有很多完全不必要的信息:

<td ondblclick="DoAdd('/student_center/sc_all_rooms/d05/09/2010/editformnew?display=W&amp;style=L&amp;positioning=A&amp;adddirect=yes&amp;accessid=CreateNewEdit&amp;filterblock=N&amp;popeditform=yes&amp;returncalendar=student_center/sc_all_rooms')" 
    class="listdefaultmonthbg" 
    style="cursor:crosshair;" 
    width="5%" 
    nowrap="1" 
    rowspan="1"> 
     <a class="listdatelink" 
      href="/student_center/sc_all_rooms/d05/09/2010/edit?style=L&amp;display=W&amp;positioning=A&amp;filterblock=N&amp;adddirect=yes&amp;accessid=CreateNewEdit">Sep 5</a> 
    </td> 

而且代码真的看起来更糟。我真正需要出有:

<td rowspan="1">Sep 5</td> 

两行后,有一个用17一个行跨度多行跨度,我想是这样的:

<tr> 
    <td rowspan="2">Sep 5</td> 
    <td>Some event</td> 
</tr> 
<tr> 
    <td>Some other event</td> 
</tr> 

将结束出这样的:

[["Sep 5", "Some event"], 
[None, "Some other event"]] 

有页面上的多个表,我可以找到一个我想了,我只是不知道如何解析出我需要的信息。我知道我可以使用BeautfulSoup来“RenderContents”,但在某些情况下,我需要删除链接标记(同时保留文本)。

我在想的过程是这样的:

  1. 查找表
  2. 计数行的表
  3. 创建列表
  4. 解析表到列表(BeautifulSoup语法??(len(table.findAll('tr'))?) ?)
  5. ???
  6. 利润! (嗯,这是一个纯粹的内部程序,所以不是真的...)

回答

0

你可能需要确定一些ATTRS,ID或名称表。

from BeautifulSoup import BeautifulSoup 

data = """ 
<table> 
<tr> 
    <td>1,1</td> 
    <td>1,2</td> 
</tr> 
<tr> 
    <td>2,1</td> 
    <td>2,2</td> 
</tr> 
</table> 
""" 

soup = BeautifulSoup(data) 

for t in soup.findAll('table'): 
    for tr in t.findAll('tr'): 
     print [td.contents for td in tr.findAll('td')] 

编辑:如果有多个链接,程序应该做什么?

例:

<td><a href="#">A</a> B <a href="#">C</a></td>