以统一的速度抓取网站

时间:2014-01-25 19:35:06

标签: php web-crawler

我需要以一定的速度抓取一个网站,比方说,每分钟8页。现在我希望我对远程服务器的请求在一分钟内均匀分布,这样就不会损害服务器它要求。

如何在两个连续请求之间保持统一的时间差(以秒为单位)?这样做的最佳方式是什么?

1 个答案:

答案 0 :(得分:1)

这里确实有两个不同的问题。让我们分别处理它们:

第一个问题

  

我需要以一定的速度抓取一个网站,比方说,每页8页   分钟....这样它不会损害它所要求的服务器。

释义:我希望每分钟不发送超过8个请求,因为我希望对远程服务器好一点。

对于这个答案,使用PHP和Curl有一个关于速率限制的related Stack Overflow question

第二个问题

  

我希望我对远程服务器的请求是统一的   分发一分钟......我怎样才能保持统一的时间   两个连续请求之间的秒数差异

释义:我想在每次查询之间有相同的时间。

这是一个与第一个问题不同的问题,而且比较棘手。要做到这一点,您需要使用时钟来跟踪每个请求之前和之后,并持续平均请求所花费的时间和您请求的睡眠时间,和/或您调用get()的频率。您还必须考虑每个请求需要多长时间(如果您获得极低的连接会降低平均值,以便您每分钟只执行3或4个请求,那该怎么办...)

我个人认为这实际上并不是你需要做的“所以它不会损害服务器”。

原因如下:通常,速率限制设置为“每个最低时间片的上限”。所以这意味着“每分钟8个请求”意味着它们可以在一分钟内同时出现,但每分钟不超过8个。速率限制器没有期望它们将在一分钟内均匀分布。如果他们确实想要这样,他们就会说“每五秒就有一次请求”。