C# 读取html时的HtmlAlityPack问题

C# 读取html时的HtmlAlityPack问题,c#,html,.net,parsing,html-agility-pack,C#,Html,.net,Parsing,Html Agility Pack,我正在用C#阅读网站,并将内容作为字符串获取……有些网站没有格式良好的html结构 我使用的是HtmlAgilityPack,在这种情况下会给我带来问题 你们能建议我使用什么,这样它就可以读取整个字符串,我就可以得到有用的信息吗 这是我的密码 htmlDoc.LoadHtml(s); if (htmlDoc.ParseErrors != null && htmlDoc.ParseErrors.Count() > 0) 为什么我的情况下会出现这种情况您得到的错误是什么

我正在用C#阅读网站,并将内容作为字符串获取……有些网站没有格式良好的html结构

我使用的是HtmlAgilityPack,在这种情况下会给我带来问题

你们能建议我使用什么,这样它就可以读取整个字符串,我就可以得到有用的信息吗

这是我的密码

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

为什么我的情况下会出现这种情况

您得到的错误是什么?它是在抛出异常还是您只是想看到错误?很难说你真正的问题是什么

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

您可以在此处查看有关此属性的更多信息

编辑

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

第二次编辑

您可以像这样循环处理错误:

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

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

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

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


我相信
ParseErrors
collection可以回答您的问题。我认为,您的HTML是无效的。你能提供s的值吗?@speti43是的,我知道我的html无效,这就是我在问题中提到的…我无法更正html,因为它直接来自网页..现在该怎么办?ParseErrors.count给我59,所以它在IF条件下出现。当我使用“htmlDoc.ParseErrors.ToString();”时,它给我这个错误。。。“System.Collections.Generic.List`1[HtmlAgilityPack.htmlparserror]”您不能只调用列表上的
.ToString()
。您需要循环处理每个错误。@Methew-我已经更新了我的答案,演示了如何循环处理
parserrors
我选中了“htmlDoc.parserrors”,它告诉我\u code=“EndTagNotRequired”“而且_reasonend Tag不是必需的…好吧-这就回答了你的问题,不是吗?我检查了“htmlDoc.ParseErrors”它告诉我_code=“EndTagNotRequired”和_reasonend Tag不是必需的…@speti-我猜这不是他的HTML,因为他说他正在阅读网站。我假设是某种类型的蜘蛛。@DaveHogan:100%正确吗?我有一只蜘蛛,现在该怎么办?我没有说要更正网站html,只是更正内存中加载的html,但他可以更正特定的错误,所以这不是一个永久的解决方案。我使用“HtmlNode.ElementsFlags.Remove(“option”);”。现在它给我一个不需要的En标记。。。