我有一个网络抓取工具,处理大约2,000个页面,我试图通过使用Parallel.ForEach循环加速。我目前的代码(为简洁而修剪)是:
Parallel.ForEach(dataTable1.AsEnumerable(), row =>
{
scrape();
}
);
public void scrape()
{
HtmlWeb htmlWeb = new HtmlWeb();
HtmlAgilityPack.HtmlDocument doc = htmlWeb.Load("http://www.website.com");
doScraping(doc);
}
当它使用常规foreach
循环时,它可以工作。现在,它将处理一些行,然后在尝试检索HTMLDocument
时开始出现以下异常:
System.dll
中出现'System.Net.WebException'类型的第一次机会异常HtmlAgilityPack.dll中出现'System.Net.WebException'类型的第一次机会异常
操作已超时
在并行循环中操作时导致超时的原因是什么?它将通过前150-300行,然后为每个后续行超时。
答案 0 :(得分:0)
我认为这是因为您对网站的最大并发HttpWebRequest连接数有限制。检查此.NET设置:ConnectionManagement Element (Network Settings)。
您也可以通过编程方式执行此操作:How can I programmatically remove the 2 connection limit in WebClient
它与浏览器并行使用,因为它使用另一个进程。