0

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

4

1 回答 1

0

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

您也可以通过编程方式执行此操作:如何以编程方式删除 WebClient 中的 2 个连接限制

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

于 2013-05-05T05:58:52.487 回答