【问题标题】:Dealing with malformed HTML using HTML Agility Pack使用 HTML Agility Pack 处理格式错误的 HTML
【发布时间】:2012-10-29 05:47:19
【问题描述】:

我正在尝试在网站上抓取一个充满数据的 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 标签,但如果必须的话。

【问题讨论】:

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


    【解决方案1】:

    您可以尝试解析 tds 并将它们按 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();
    

    【讨论】:

      猜你喜欢
      • 2014-05-04
      • 2013-04-30
      • 2011-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多