代码之家  ›  专栏  ›  技术社区  ›  Victor Bjelkholm

HTML敏捷包帮助

  •  9
  • Victor Bjelkholm  · 技术社区  · 14 年前

    我试图从一个网站上搜集一些信息,但找不到适合我的解决方案。我在互联网上读到的每一个代码都会为我产生至少一个错误。

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

    我的代码:

             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

    非常感谢您的帮助!

    4 回复  |  直到 12 年前
        1
  •  9
  •   Lucas Jones    14 年前

    使用 HtmlAgilityPack.HtmlDocument :

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

    由于导入了两个命名空间,编译器变得很困惑。 using 包含调用的类 HtmlDocument -HTML Agility Pack命名空间和Windows窗体命名空间。您可以通过指定要显式使用的类来绕过这个问题。

        2
  •  4
  •   Aditya Bajaj    12 年前

    这就是我的成就。注意,MAIN中有一个代码错误 Html Agility Pack Example 在foreach line doc.documentelement.selectnodes(“//a[@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());
    

    既然它对我有用,我想我应该分享。

        3
  •  2
  •   James Dunne    14 年前

    两个命名空间中的类 System.Windows.Forms HtmlAgilityPack 相互冲突。使用完全限定的类型名或命名空间别名。

        4
  •  1
  •   tomfanning    13 年前

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

    警告(2012-06-08):这个链接在广告下面有点垃圾,内容不多。

    我不知道他们现在是否已经修复了它,但那个片段以前并没有在网站的主页上工作过,我认为它来自于早期版本的图书馆。另外,代码段没有定义fixlink(),因此即使它对于库是正确的,它也不会工作。

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

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

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

    至于您试图执行的实际任务,您似乎想要获取一个URL,在其中插入一个用户名和ID,然后…不确定?你看起来都想把文件保存到磁盘上,然后把HTML代码设置为一个我认为你做不到的表单的内容?

    推荐文章