【问题标题】:HtmlAgilityPack Issue in reading html阅读 html 时出现 HtmlAgilityPack 问题
【发布时间】:2013-06-18 13:00:21
【问题描述】:

我正在阅读 C# 中的网站并以字符串形式获取内容....有些网站没有格式良好的 html 结构。

我正在使用 HtmlAgilityPack 在这种情况下会给我带来问题。

你们能否建议我使用什么,以便它可以读取整个字符串并且我可以获得有用的信息?

这是我的代码

 htmlDoc.LoadHtml(s);
  if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0)

为什么这个 IF 条件适用于我的情况

【问题讨论】:

  • 相信ParseErrors收藏可以回答你的问题
  • 我认为,您的 HTML 无效。你能提供s的值吗?
  • @speti43 是的,我知道我的 html 无效,这就是我在问题中提到的......我无法更正 html,因为它直接来自网页......现在该怎么办?

标签: c# html .net parsing html-agility-pack


【解决方案1】:

您遇到的错误是什么?它是抛出异常还是您只是想查看错误?很难说出你的实际问题是什么。

您可以使用HtmlDoc.ParseErrors 属性查看HTML 中的标记错误并对其进行迭代。这将为您提供行号、代码和错误类型。

您可以在此处查看有关此属性的更多信息 https://stackoverflow.com/a/5367455/235644

编辑

好的,自从我回复您后,您已经更新了您的问题。您可以通过上述.ParseErrors 循环查看在您的 IF 语句中返回 true 的特定错误。

二次编辑

您可以像这样循环错误:

 foreach (var error in htmlDoc.ParseErrors)
 {
      Debug.WriteLine(error.Line);
      Debug.WriteLine(error.Reason);
 }

【讨论】:

  • ParseErrors.count 给我 59 所以它出现在 IF 条件下。当我使用“htmlDoc.ParseErrors.ToString();”它给了我这个错误...“System.Collections.Generic.List`1[HtmlAgilityPack.HtmlParseError]”
  • 你不能只在列表上调用.ToString()。您需要遍历每个错误。
  • @Methew - 我已经更新了我的答案,以演示如何循环通过 ParseErrors
  • 我检查了“htmlDoc.ParseErrors”,它告诉我 _code="EndTagNotRequired" 和 _reason End Tag 不是必需的...
  • 好的 - 这样回答你的问题不是吗?
【解决方案2】:

您必须修复 HTML 中的错误,在它生效后您可以继续。 这是同样的问题: Invalid HTML in AgilityPack

【讨论】:

  • 我检查了“htmlDoc.ParseErrors”,它告诉我 _code="EndTagNotRequired" 和 _reason End Tag 不是必需的...
  • @speti - 我收集到这不是他的 HTML,因为他说他是 reading websites。我假设是某种蜘蛛。
  • @DaveHogan:100% 正确……我有一只蜘蛛,现在该怎么办?
  • 我没说要纠正网站html,只是纠正内存中加载的html,但是他可以纠正一个具体的错误,所以不是一劳永逸的办法。
  • 我使用“HtmlNode.ElementsFlags.Remove("option");"..现在它给了我 En Tag 不需要...
【解决方案3】:

如果您的 html 是外部的并且您无法修复它,您可以先通过清理预处理器运行它,然后使用 HtmlAgilityPack 对其进行解析。

这将尝试在HtmlAgilityPack 看到它之前自动修复尽可能多的问题。最流行的 HTML 清理工具是 Tidy。在此处查看 .NET 版本:

http://sourceforge.net/projects/tidynet/

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多