2010-06-05 78 views
2

考慮這個簡單的代碼塊:使用HTMLAgility包來提取鏈接

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using HtmlAgilityPack; 

namespace WebScraper 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      HtmlDocument doc = new HtmlDocument(); 
      doc.LoadHtml("http://www.google.com"); 

      foreach (HtmlNode link in doc.DocumentNode.SelectNodes("//a[@href]")) 
      { 
      } 
     } 
    } 
} 

這實際上沒有做任何事情,並且被複制/從各種其他StackOverflow的問題,如this啓發。 編譯時,會出現一個運行時錯誤,指出「對象引用未設置爲對象的實例」。突出顯示了每條線。

我不明白,爲什麼環境變得對這種卑微,無辜和無用的代碼片斷變得敏感。

我也想知道,HTMLAgilityPack是否接受HTML類作爲節點?

回答

4

如果你想從網上加載HTML,你需要使用HtmlWeb對象:

HtmlWeb web = new HtmlWeb(); 
HtmlDocument doc =web.Load(url); 
+0

thnks問題解決了! – Soham 2010-06-05 11:55:19

1

LoadHtml將一串實際的HTML作爲參數。您可以改爲從WebResponse.GetResponseStream()傳遞加載流。

WebRequest req = WebRequest.Create("http://www.google.com"); 
Stream s = req.GetResponse().GetResponseStream(); 
doc.Load(s); 
+0

感謝。我沒有預見到這一點。 – Soham 2010-06-05 11:55:38