2012-11-08 33 views
0

我试图抓取一个网站上的数据完整的HTML表格。不幸的是,表中的源代码如下所示:使用HTML敏捷包处理格式错误的HTML

<table border="1" cellspacing="0" cellpadding="3"> 

<tr> 
<td bgcolor="silver"><font face="arial,helvetica" size="1">Last Name</font></td> 

<td bgcolor="silver"><font face="arial,helvetica" size="1">First Name</font></td> 

<td bgcolor="silver"><font face="arial,helvetica" size="1">Middle</font></td> 
</tr> 

<td valign="top"><font face="arial,helvetica" size="1"> 
Data</font></td> 

<td valign="top"><font face="arial,helvetica" size="1"> 
Data</font></td> 

<td valign="top"><font face="arial,helvetica" size="1"> 
Data</font></td> 
</tr> 

<td valign="top"><font face="arial,helvetica" size="1"> 
More Data</font></td> 

<td valign="top"><font face="arial,helvetica" size="1"> 
More Data</font></td> 

<td valign="top"><font face="arial,helvetica" size="1"> 
More Data</font></td> 
</tr> 
</table> 

注缺乏盯着标题后的每一行“TR”标签。该表在浏览器中显示正常,但html敏捷性包无法识别没有开始标记的tr元素。无论如何,我可以得到HTML敏捷包来解决这个问题?我宁愿不自己插入tr标签,但如果必须的话。

回答

1

您可以尝试通过3项解析td S和他们组,

var list = doc.DocumentNode.Descendants("td") 
      .Select((td, i) => new { td, i }) 
      .GroupBy(x => x.i/3) 
      .Select(g => g.Select(t => t.td.InnerText).ToList()) 
      .ToList();