2014-11-14 92 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