2012-11-08 60 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();