【问题标题】:Html parsing with Agility使用 Agility 进行 Html 解析
【发布时间】:2012-08-15 15:45:10
【问题描述】:

有人可以帮助解决在 C# 中通过 Agility 解析 Html 的顺序标签的问题吗?我有 2 个问题,如下所列。

在这种情况下,我想解析 Html 并将它们存储到一个结构(列表、堆栈等)中,以便我可以有效地使用这些数据。

<h3> header </h3>
<p> paragraph 1</p>
<p>
<a href="www.google.com">Google</a>
<a href="www.gizmodo.com">Gizmodo</a>
</p>
<ul> 
<li> something is here with a download
<a href="www.google.com">link</a>
</li>
<li> hello 
<img src="www.imagesource.com"/>
</li>
</ul>
  1. 如何按顺序解析这些数据?

    如果我使用var ParaTags = HtmlDocument.DocumentNode.Descendants("p");, 那么我只能得到所有的“p”标签。但我不知道如何依次获取“h3”和“p”,因为“p”不在“h3”内。

以下代码将返回所有超链接,

var links =
    from paras in document.DocumentNode.Descendants("p")
    from hyperLinks in paras.Descendants("a").Where(x => x.Attributes["href"].Value != "")
    select hyperLinks;
  1. 用字符串、超链接和图像解析和存储这些混合内容的最佳方法是什么? 所以我可以稍后以有效的方式输出它们?列表,堆栈? 换句话说,我想从 html 中存储所有可能的内容,并尽可能保留其格式。因此,一旦我将内容重新加载到应用程序上,我就可以以正确的格式模拟内容。

谢谢!

【问题讨论】:

  • 不清楚你想从这个 HTML 中提取什么信息并存储。是否要提取超链接的所有href 属性?还是hrefsrc 的图片?
  • 我想要该 html 中所有可能的内容,包括 h3、所有 p、li、href 和 img src。如果可能的话,格式也是。谢谢。
  • 如果有记忆,您可以在 HtmlDocument 类上使用 XmlReader,它可以让您按顺序读取每个标签,但我不确定您期望的输出是否会为您提供用一些你可以重建成精确 Html 的东西。

标签: c# html parsing


【解决方案1】:

如果你想提取所有hrefsrc 属性,你可以试试这个:

using System;
using System.Linq;
using HtmlAgilityPack;

public class Program
{
    static void Main()
    {
        var document = new HtmlDocument();
        document.Load("test.html");
        var links =
            from element in document.DocumentNode.Descendants()
            let href = element.Attributes["href"]
            let src = element.Attributes["src"]
            where href != null || src != null
            select href != null ? href.Value : src.Value;

        foreach (var link in links)
        {
            Console.WriteLine(link);
        }
    }
}

输出:

www.google.com
www.gizmodo.com
www.google.com
www.imagesource.com

【讨论】:

  • 但我也需要提取h3和p的文本!
猜你喜欢
  • 1970-01-01
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 2011-06-04
  • 2014-07-13
  • 2014-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多