我正试图从网站上搜集一些信息,但找不到适合我的解决方案。我在互联网上阅读的每个代码都会为我产生至少一个错误。
即使他们主页上的示例代码也会给我带来错误。
我的代码:
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 :(得分:9)
使用HtmlAgilityPack.HtmlDocument
:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
编译器变得困惑,因为您使用using
导入的两个名称空间包含名为HtmlDocument
的类 - HTML Agility Pack名称空间和Windows窗体名称空间。您可以通过指定要明确使用的类来解决此问题。
答案 1 :(得分:4)
这就是我取得的成就。请注意,foreach行doc.DocumentElement.SelectNodes(“// a [@href”])中的主Html Agility Pack Example中给出了代码错误。下面给出了正确的和经过测试的。
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());
因为它为我工作,我想我应该分享。
答案 2 :(得分:2)
两个名称空间System.Windows.Forms
和HtmlAgilityPack
中的类是冲突的。使用完全限定的类型名称或使用名称空间别名。
答案 3 :(得分:1)
我写了几篇解释如何使用HtmlAgilityPack的文章。您可能会发现它们对入门很有用:
警告(2012-06-08):这个链接有点垃圾 - 狡猾的pop-under广告,内容不多。
我不知道他们现在是否已修复它但该片段不常用于网站的主页,我认为它来自该库的早期版本。此外,该代码段还没有定义FixLink(),因此即使它对库是正确的也不会起作用。
我建议获取该库的最新测试版,因为它有额外的扩展来执行对它的linq查询,这可以避免以后混淆xpath查询。
我之前没有在Windows窗体应用程序中看到它,但看起来你必须使用完全限定的类型名称,如:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
至于你想要执行的实际任务,似乎你想要一个网址,注入一个用户名和id,然后......不确定?您似乎都在尝试将文件保存到磁盘并将html代码设置为我认为您无法执行的表单内容?