使用HTML Agility Pack处理格式错误的HTML

时间:2012-11-08 22:34:49

标签: c# html html-parsing html-agility-pack

我正在尝试在网站上抓取一个充满数据的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 个答案:

答案 0 :(得分:2)

您可以尝试解析td并将它们分为3个项目,

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();