如何执行PHP蜘蛛/刮刀但没有超时

时间:2009-02-25 12:52:39

标签: php web-crawler

基本上我需要绕过最长执行时间。

我需要以不同的时间间隔抓取信息页面,这意味着按照这些间隔调用机器人,从数据库加载链接并废弃链接指向的页面。

问题是,加载机器人。如果我用javascript加载它(就像一个Ajax调用),浏览器会抛出一个错误,说该页面花了太长时间来响应yadda yadda yadda,而且我必须保持页面打开。

如果我在PHP中执行此操作,我可能会将执行时间延长到需要很长时间但是如果它确实抛出错误我没有访问权来杀死进程,并且浏览器中没有任何内容显示PHP执行完成了吗?

我想知道是否有人有任何伎俩来解决这个问题?刮刀以不同的间隔自行执行,而不需要一直看着它。

干杯:)

4 个答案:

答案 0 :(得分:2)

使用set_time_limit()

set_time_limit(0);
// Do Time Consuming Operations Here

答案 1 :(得分:1)

看看Sphider (PHP Search Engine)如何做到这一点。

基本上,如果有一个continue = true参数集,你只需要处理你需要的部分网站,做你自己的事情,然后继续下一个请求。

答案 2 :(得分:1)

  

“在PHP执行完成之前,浏览器中不会显示任何内容”

您可以使用flush()解决此问题:

  

flush()

     

(PHP 4,PHP 5)

     

刷新PHP的输出缓冲区以及PHP正在使用的任何后端(CGI,Web服务器等)。这有效地尝试将所有输出推送到用户的浏览器。

答案 3 :(得分:0)

通过CRON运行并将蜘蛛分成块,因此它一次只会执行几个块。从CRON调用不同的参数来处理很少的块。