HtmlAgilityPack中的'System.Net.WebException'使用Parallel.ForEach循环

时间:2013-05-04 16:22:24

标签: c# html-agility-pack parallel.foreach

我有一个网络抓取工具,处理大约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行,然后为每个后续行超时。

1 个答案:

答案 0 :(得分:0)

我认为这是因为您对网站的最大并发HttpWebRequest连接数有限制。检查此.NET设置:ConnectionManagement Element (Network Settings)

您也可以通过编程方式执行此操作:How can I programmatically remove the 2 connection limit in WebClient

它与浏览器并行使用,因为它使用另一个进程。