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
所有帮助非常感谢!
使用HtmlAgilityPack.HtmlDocument
:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
编译器感到困惑,因为你们两个已经与using
导入的命名空间的含有类调用HtmlDocument
- 的HTML敏捷性包命名空间,Windows窗体的命名空间。你可以通过指定你想明确使用哪个类来解决这个问题。
然后我得到另一个错误: 'HtmlAgilityPack.HtmlDocument'不包含'DocumentElement'的定义,并且没有找到接受'HtmlAgilityPack.HtmlDocument'类型的第一个参数的扩展方法'DocumentElement'(你是否缺少using指令或者是程序集引用?) – 2010-10-18 20:53:02
@Victor:我不确定库的确切布局,但我确实看到示例代码http://htmlagilitypack.codeplex.com/wikipage?title=Examples&referringTitle=Home。从该页面底部的注释中,您可能想要尝试使用“DocumentNode”而不是“DocumentElement”。这虽然有点长... – 2010-10-18 20:57:22
DocumentNode给了我更多的错误DocumentElement – 2010-10-18 21:10:43
两个命名空间System.Windows.Forms
和HtmlAgilityPack
中的类是冲突的。使用完全限定的类型名称或使用名称空间别名。
这对我没有太大的帮助,你能演变我应该多做些什么吗? – 2010-10-18 21:09:51
我写了几篇文章解释如何使用HtmlAgilityPack。你可能会发现它们非常有用上手:
警告(2012-06-08):此链接是有点垃圾 - 狡猾的弹出式广告下,没有太多的内容。
我不知道他们是否已经修复了它,但该片段并未用于在网站的主页上工作,我认为它来自早期版本的库。此外,片段没有定义FixLink(),所以即使它对于库是正确的也不起作用。
我建议获取该库的最新beta版本,因为它有额外的扩展来执行对它的linq查询,这可以让您免于后来混淆xpath查询。
我还没有看到它在Windows中使用窗体应用程序之前,但它看起来像你将不得不使用完全限定的类型名称,如:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument();
至于您要执行实际任务,似乎你想要一个网址,注入一个用户名和ID,然后......不确定?你看起来像你都试图将文件保存到磁盘,并将HTML代码设置为表单的内容,我认为你不能做到这一点?
@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());
既然得到了我的工作,我想我应该分享。
正如我在下面的回复中提到的,我无法确切地告诉你正在尝试做什么。如果您可以详细描述您正在尝试完成的任务,我会尽力帮助您编写一个示例应用程序来实现它。 – rtpHarry 2010-10-30 10:39:11
我想你可以用“HtmlAgilityPack.HtmlDocument”而不是“HtmlDocument”来关闭编译器。 – 2013-06-04 18:49:14
啊,这是“使用HtmlDocument = System.Windows.Forms.HtmlDocument;”不知何故“神奇地”被添加到我的使用条款中,该条款掩盖了HtmlDocument类的HtmlAgilityPack版本。 – 2014-02-14 19:08:27