HTML Agility Pack - 获取页面摘要

时间:2009-11-23 15:27:42

标签: html parsing html-agility-pack

如何使用HTML Agility Pack从HTML文件正文中获取文本的第一段。我正在构建一个DIGG样式链接提交工具,并希望获得标题和文本的第一段。标题很简单,有关如何从正文中获取第一段文本的任何建议?我猜它可能在P或DIV范围内,具体取决于页面。

2 个答案:

答案 0 :(得分:3)

这是你控制的HTML吗?如果是这样,你可以给p一个id或一个类,并通过

找到它
//p[@id=\"YOUR ID\"] or //p[@class=\"YOUR CLASS\"]

编辑: 由于你不控制html,也许以下工作。它接受所有HtmlTextNodes并尝试查找大于指定阈值的文本分组。它远非完美,但可能会让你朝着正确的方向前进。

String summary = FindSummary(page.DocumentNode);

private const int THRESHOLD = 50;
private String FindSummary(HtmlAgilityPack.HtmlNode node) {
    foreach (HtmlAgilityPack.HtmlNode childNode in node.ChildNodes) {
        if (childNode.GetType() == typeof(HtmlAgilityPack.HtmlTextNode)) {
            if (childNode.InnerText.Length >= THRESHOLD) {
                return childNode.InnerText;
            }
        }

        String summary = FindSummary(childNode);
        if (summary.Length >= THRESHOLD) {
            return summary;
        }
    }

    return String.Empty;
}

答案 1 :(得分:0)

agility pack使用xpath查询html加载,只需使用简单的xpath语句。有点像...

HtmlDocument htmldoc = new HtmlDocument();
htmldoc.LoadHtml(content);

HtmlNodeCollection firstParagraph = htmldoc.DocumentNode.SelectNodes("//p[1]");