【问题标题】:HTML Agility Pack - Get Page SummaryHTML 敏捷包 - 获取页面摘要
【发布时间】:2010-12-19 12:34:03
【问题描述】:

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

【问题讨论】:

    标签: html parsing html-agility-pack


    【解决方案1】:

    这个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;
    }
    

    【讨论】:

    • 我不控制HTML,用户可以提交任何他们喜欢的页面,所以我不知道容器的ID或类是什么
    • 谢谢!这就是我要找的!
    【解决方案2】:

    敏捷包使用 xpath 来查询 html 加载,您只需使用一个简单的 xpath 语句。比如……

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-26
      • 1970-01-01
      相关资源
      最近更新 更多