我使用PHP(和cURL)制作了一个简单的网络爬虫,它解析大约60,000个html页面并检索产品信息(这是一个内部网站上的工具)。
我的主要关注点是并发连接。我想限制连接数,以便无论发生什么情况,爬虫都不会使用超过15个并发连接。
每当IP达到25个并发连接的限制时,服务器将阻止该IP,并出于某种原因,我无法在服务器端更改它,所以我必须找到一种方法让我的脚本永远不会使用超过X个并发连接。
这可能吗?
还是我应该用另一种语言重新编写整个东西?
谢谢,感激任何帮助!
我使用PHP(和cURL)制作了一个简单的网络爬虫,它解析大约60,000个html页面并检索产品信息(这是一个内部网站上的工具)。
我的主要关注点是并发连接。我想限制连接数,以便无论发生什么情况,爬虫都不会使用超过15个并发连接。
每当IP达到25个并发连接的限制时,服务器将阻止该IP,并出于某种原因,我无法在服务器端更改它,所以我必须找到一种方法让我的脚本永远不会使用超过X个并发连接。
这可能吗?
还是我应该用另一种语言重新编写整个东西?
谢谢,感激任何帮助!
您可以使用curl_set_opt(CURLOPT_MAXCONNECTS, 15);
来限制连接数量。但如果这不能满足您的需求,您可能还需要创建一个简单的连接管理器。
或许可以编写一个简单的连接表:
target_IP | active_connections
1.2.3.4 10
4.5.6.7 5
每个curL调用都会增加连接数,每个close则会减少连接数。
您可以将表存储在MySQL表中,或者使用Memcache以提高速度。
当您遇到已达到最大连接数的IP时,您需要实现一个“稍后再试”的队列。