2014-11-14 51 views
-1

我正在開發一個小型履帶,它​​只會用於我們公司的網站。抓取工具會抓取一個網址並抓取該網址,讀取該網址的內容,並提取該網頁中的其他網址,然後開始抓取這些網址....以同樣的方式處理,讀取文件內容以及抓取其他網址並閱讀它們內容也一樣。如何同時讀取和抓取網址和網站文件內容c#

我想同時完成所有這些任務。超過1年後,我開發了一個多線程文件下載器,可同時下載文件。

這裏是位同步下載文件的片段。

var list = new[] 
{ 
    "http://google.com", 
    "http://yahoo.com", 
    "http://stackoverflow.com" 
}; 

var tasks = Parallel.ForEach(list, 
     s => 
     { 
      using (var client = new WebClient()) 
      { 
       Console.WriteLine("starting to download {0}", s); 
       string result = client.DownloadString((string)s); 
       Console.WriteLine("finished downloading {0}", s); 
      } 
     }); 

如果有人指導我如何編碼以實現我的目標,那將會非常有幫助。感謝

+0

你提的問題是非常廣泛的一個簡單的蘇答案和你的代碼片段甚至沒有與它有關。請編輯它或它可能會被關閉。 – xxbbcc 2014-11-14 15:00:39

+0

parallel.foreach可以同時運行多少個線程? – Thomas 2014-11-14 16:34:06

+0

我很抱歉,我無法正確解釋我的問題。我想以這種方式開發一個小爬蟲,當爬蟲開始解析任何網址時,它會從內容中提取所有網址,並將這些網址添加到隊列中,同一個程序將監視該隊列。一個新的url將被添加到隊列中,新線程將開始解析該url並從該內容中提取所有url並添加到隊列中。一旦任何URL內容的解析將被完成,那麼該URL將被從隊列中移除。只是引導我示例代碼和想法如何開發這種程序。 – Thomas 2014-11-16 17:57:37

回答

0

獲取HTML

public string getHTML(string url) 
{ 
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url); 
HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
StreamReader sr = new StreamReader(response.GetResponseStream()); 
string html = sr.ReadToEnd(); 
sr.Close(); 
response.Close(); 
return html; 
} 

爲了解析代碼中使用像一個解析器:HTML Agility Pack

+0

我不是在閱讀網頁內容之後。我的問題是,當我從網頁中提取網址,然後如何在同一時間使用任務庫遞歸地解析這些網頁的內容?主意將不勝感激。 – Thomas 2014-11-16 17:51:02