Html敏捷包帮助

问题描述:

我想从网站上刮取一些信息,但无法找到适合我的解决方案。我在互联网上阅读的每个代码都会给我至少产生一个错误。Html敏捷包帮助

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

我的代码:

  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

所有帮助非常感谢!

+0

正如我在下面的回复中提到的,我无法确切地告诉你正在尝试做什么。如果您可以详细描述您正在尝试完成的任务,我会尽力帮助您编写一个示例应用程序来实现它。 – rtpHarry 2010-10-30 10:39:11

+0

我想你可以用“HtmlAgilityPack.HtmlDocument”而不是“HtmlDocument”来关闭编译器。 – 2013-06-04 18:49:14

+0

啊,这是“使用HtmlDocument = System.Windows.Forms.HtmlDocument;”不知何故“神奇地”被添加到我的使用条款中,该条款掩盖了HtmlDocument类的HtmlAgilityPack版本。 – 2014-02-14 19:08:27

使用HtmlAgilityPack.HtmlDocument

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

编译器感到困惑,因为你们两个已经与using导入的命名空间的含有类调用HtmlDocument - 的HTML敏捷性包命名空间,Windows窗体的命名空间。你可以通过指定你想明确使用哪个类来解决这个问题。

+0

然后我得到另一个错误: 'HtmlAgilityPack.HtmlDocument'不包含'DocumentElement'的定义,并且没有找到接受'HtmlAgilityPack.HtmlDocument'类型的第一个参数的扩展方法'DocumentElement'(你是否缺少using指令或者是程序集引用?) – 2010-10-18 20:53:02

+0

@Victor:我不确定库的确切布局,但我确实看到示例代码http://htmlagilitypack.codeplex.com/wikipage?title=Examples&referringTitle=Home。从该页面底部的注释中,您可能想要尝试使用“DocumentNode”而不是“DocumentElement”。这虽然有点长... – 2010-10-18 20:57:22

+0

DocumentNode给了我更多的错误DocumentElement – 2010-10-18 21:10:43

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

+0

这对我没有太大的帮助,你能演变我应该多做些什么吗? – 2010-10-18 21:09:51

我写了几篇文章解释如何使用HtmlAgilityPack。你可能会发现它们非常有用上手:

警告(2012-06-08):此链接是有点垃圾 - 狡猾的弹出式广告下,没有太多的内容。

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

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

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

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

至于您要执行实际任务,似乎你想要一个网址,注入一个用户名和ID,然后......不确定?你看起来像你都试图将文件保存到磁盘,并将HTML代码设置为表单的内容,我认为你不能做到这一点?

+0

@tomfanning - 感谢通知,似乎其中一个小部件是垃圾邮件用户。我已经删除了PostRank和Blogged.com小部件,并且我没有再看到垃圾邮件流行。 – rtpHarry 2012-06-20 12:54:36

这就是我的成就。请注意,在foreach文档中主Html Agility Pack Example中存在代码错误。DocumentElement.SelectNodes( “//一个[@href”])。下面给出了正确的和经过测试的。

HtmlWeb hw = new HtmlWeb(); 

    HtmlDocument doc = hw.Load(@"http://tipscow.com"); 
    StringBuilder sb = new StringBuilder(); 

    List<string> lstHref = new List<string>(); 

    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 +"<br />"); 
    } 

    Response.Write (sb.ToString()); 

既然得到了我的工作,我想我应该分享。