Html Agility Pack帮助

我试图从网站上抓取一些信息,但找不到适合我的解决方案。 我在Internet上阅读的每个代码都会为我生成至少一个错误。

即使他们主页上的示例代码也会为我生成错误。

我的代码:

HtmlDocument doc = new HtmlDocument(); doc.Load("https://www.flashback.org/u479804"); foreach(HtmlNode link in doc.DocumentElement.SelectNodes("//a[@href"]) { HtmlAttribute att = link["href"]; att.Value = FixLink(att); } doc.Save("file.htm"); 

生成以下错误:

‘HtmlDocument’是’System.Windows.Forms.HtmlDocument’和’HtmlAgilityPack.HtmlDocument’C:* \ Form1.cs之间的模糊引用

编辑:我的整个代码位于: http : //beta.yapaste.com/55

非常感谢所有帮助!

使用HtmlAgilityPack.HtmlDocument

 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 

编译器变得混乱,因为您使用导入的两个名称空间包含名为HtmlDocument类 – HTML Agility Pack名称空间和Windows窗体名称空间。 您可以通过指定要明确使用的类来解决此问题。

这就是我的成就。 请注意,在foreach行doc.DocumentElement.SelectNodes(“// a [@href”])中的主Html Agility Pack示例中给出了代码错误。 下面给出了正确且经过测试的。

  HtmlWeb hw = new HtmlWeb(); HtmlDocument doc = hw.Load(@"http://tipscow.com"); StringBuilder sb = new StringBuilder(); List lstHref = new List(); foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]").Distinct()) { string curHref = link.Attributes["href"].Value; if(!lstHref.Contains(curHref)) lstHref.Add(curHref); } foreach (string str in lstHref) { sb.Append(str +"
"); } Response.Write (sb.ToString());

既然它适合我,我想我应该分享。

两个名称空间System.Windows.FormsHtmlAgilityPack是冲突的。 使用完全限定的类型名称或使用命名空间别名。

我写了几篇解释如何使用HtmlAgilityPack的文章。 您可能会发现它们对入门很有用:

警告(2012-06-08):这个链接有点垃圾 – 狡猾的pop-under广告,没有太多内容。

我不知道他们现在是否修复了它,但该片段并不常用于网站的主页,我认为它来自该库的早期版本。 此外,代码片段没有定义FixLink(),因此即使它对库是正确的也不会起作用。

我建议获取该库的最新测试版,因为它有额外的扩展来执行对它的linq查询,这可以避免以后混淆xpath查询。

我之前没有在Windows窗体应用程序中看到它,但看起来你必须使用完全限定的类型名称,如:

 HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); 

至于你想要执行的实际任务,似乎你想要一个url,注入一个用户名和id,然后……不确定? 您看起来都在尝试将文件保存到磁盘并将html代码设置为我认为您无法执行的表单内容?