我試圖從網站上抓取一些信息,但找不到適合我的解決方案。我在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();
編譯器感到困惑,因為你們兩個已經與導入的命名空間的using
含有類調用HtmlDocument
-的HTML敏捷性包命名空間,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<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());
既然它適合我,我想我應該分享。