在目标web服务器上使用Php/Querypath爬网程序的已知或预期影响是什么,以及如何将其保持在最低限度


What are the known or expected impact of using Php/Querypath crawler on a target web server, and how can it be kept to a minimum?

我正在构建一个php+querypath爬网程序来原型化一个想法。我担心一旦我运行它,目标网站可能会受到某种影响,因为它有大量的相关页面我想抓取——目前有1361页。

有什么建议可以将对目标场地的影响降至最低?

由于您正在构建一个爬网程序,因此您对目标网站的唯一影响就是耗尽它们的带宽

为了将影响降至最低,您可以执行以下操作:
1.在构建你的爬网程序时,在你的计算机上下载目标网站的示例页面,并在该副本上测试你的脚本
2.确保正在运行的用于抓取1361页的循环正常工作,并且每个页面只下载一次
3.确保脚本一次只下载一个页面,并可以选择在每次获取之间包含一个间隔,这样目标服务器上的负载就会减少
4.根据每页的重量,您可以决定在数小时/数天/数月内下载整个1361页。

QueryPath本身将发出普通的HTTP请求——一点也不奇怪。1361也不一定是一个大数字。

我建议你循环爬行,连续抓取一些页面(比如10页),睡几秒钟,然后再抓取10页。假设$urls是一个URL数组,你可以尝试这样的方法:

$count = count($urls);
$interval = 10; // Every ten times...
$wait = 2; // Wait two seconds.
for ($i = 0; $i < $count; ++$i) {
  // Do whatever you're going to do with QueryPath.
  $qp = qp($url);
  if ($i > 0 && $i % $interval == 0) {
    sleep($wait);
  }
}

正如前一张海报所建议的,使用较少数量的URL进行测试,然后从那里开始。

以下是一些其他提示:

  • 远程站点的robots.txt文件有时会建议爬网程序在两次爬网之间应该等待多长时间(爬网延迟)。如果设置了这个值,那么它是$wait变量应该设置为什么值的一个很好的指标
  • 在非高峰时间(例如当地时间凌晨2点)访问站点将最大限度地减少远程站点被请求淹没的可能性