如何使用HtmlAgilityPack清理html?

时间:2017-12-21 11:09:11

标签: c# html-agility-pack

我在webscraper中遇到问题,基本上我需要在单元格team_a_col home内获取十进制数字:

<th>Med. goal subiti p/p</th>
<td class='team_a_col total'>0.76</td>
<td class='team_a_col home'>0.89
<td class='team_a_col away'>0.62</td></td>

所以结果应该是:0.89

但是你可以看到html结构不正确,所以我没有得到0.89,而是使用以下代码获得team_a_col away的内容:

node.SelectSingleNode(".//td[@class='team_a_col home']").InnerText.Trim();

我怎么才能得到0.89? </td>应该在<team_a_col away之前。

2 个答案:

答案 0 :(得分:3)

您应该将HtmlDocument.FixNestedTags设置为true

string html = "<th>Med. goal subiti p/p</th><td class='team_a_col total'>0.76</td><td class='team_a_col home'>0.89<td class='team_a_col away'>0.62</td></td>";

var doc = new HtmlAgilityPack.HtmlDocument
{
    OptionFixNestedTags = true,
    OptionCheckSyntax = true,
    OptionAutoCloseOnEnd = true
};
doc.LoadHtml(html);

string tdText = doc.DocumentNode.SelectSingleNode(".//td[@class='team_a_col home']")?.InnerText.Trim();

使用FixNestedTags,结果为:0.89

答案 1 :(得分:0)

你可以拿整行然后子串并获取数据吗?

var node = doc.DocumentNode.SelectNodes("//htmlelment/htmlelment");

string[] nodeArray = node[0].OuterHtml.Split(' ');