【问题标题】:Suggestion Needed: Best way of parsing HTML in C#需要的建议:在 C# 中解析 HTML 的最佳方式
【发布时间】:2009-05-27 14:35:41
【问题描述】:

这是我的问题。这是从 HTML 页面中提取某些信息的最佳方式。 我目前所做的如下:

  1. 使用 WebClient 下载页面

  2. 使用 UTF8Encoding 将接收到的数据转换为字符串

  3. 将字符串转换为 XML

  4. 使用 .NET Framework 中的 Xml 相关类提取所需数据

这是我目前所做的总结形式。有人知道另一种方法吗?可以更快或更容易的东西吗?

最好的问候, 基里尔

PS:我听说过一个名为Watin的测试框架

这可以让你做类似的事情,但没有太多研究

【问题讨论】:

  • 尝试谷歌搜索而不是解析
  • 这是很多类似问题的骗局..

标签: c# html


【解决方案1】:

听起来您已经知道如何获取页面数据(这是最简单的部分)。

除此之外,我用于此类任务的最佳托管库是HTML Agility Pack。它是开源的并且非常成熟,完全用 .NET 编写。它可以处理格式错误的 HTML,并且可以通过两种不同的方式完成您需要的工作:

  • 原生支持针对 HTML DOM 的 XPATH 和类似 XML 的查询。它旨在模仿 .NET 的 XML 库,因此您可以使用 .NET 对 XML 执行任何操作,也可以使用此对 HTML 执行任何操作。

  • 支持从 HTML 生成有效的 XML,因此您可以使用任何 XML 工具。

【讨论】:

    【解决方案2】:

    为了您的解析需求,我推荐HTML Agility Pack

    要实际检索 HTML,请使用 WebRequest

    【讨论】:

      【解决方案3】:

      除非您使用完美格式的 XHTML 正则表达式会更适合解析 html?

      Watin 允许您通过 IE 在网页上编写按钮单击、脚本调用等脚本(不确定是否可以使用其他浏览器?)。我不认为这会完成你正在寻找的东西。

      【讨论】:

      • 正则表达式也不能很好地处理格式错误的 HTML。
      • 不,但我怀疑许多第三方库将它们与标准字符串操作结合使用来处理 html,无论哪种方式,正则表达式都优于 XML 查询提供的灵活性。
      • 是的——我一直在使用它们。它们仅在不是来自模板系统的人工编写的 HTML 上表现不佳——结构化数据的比例微乎其微。不应该被我否决 +1。
      • @Simon 不幸的是,许多模板系统使用用格式错误的 HTML 编写的模板。正则表达式可以很好地提取相当小的数据集,但是编写高度复杂的大数据提取所需的时间远远超过 XML 化标记和使用 XPATH。
      • 那么“XML 化”标记将如何帮助处理格式错误的 HTML?但是我同意 HTML 敏捷包可能是他/她正在寻找的 - 它可能在某些时候使用正则表达式;)
      【解决方案4】:

      我相信这可以通过使用 WebClient.DownloadString 方法稍微简化。

      有关解析的详细信息,请参阅其他答案,因为我还没有尝试过 HTML Agility Pack。

      【讨论】:

      • 不,不会,但我认为 HTML Agility Pack 上的其他答案足以很好地涵盖该方面。
      猜你喜欢
      • 2013-01-14
      • 2020-03-14
      • 2014-04-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多