【问题标题】:How to execute a PHP spider/scraper but without it timing out如何执行 PHP 蜘蛛/爬虫但没有超时
【发布时间】:2009-02-25 12:52:39
【问题描述】:

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

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

问题是,加载机器人。如果我用 javascript 加载它(比如 Ajax 调用),浏览器会抛出一个错误,指出页面响应时间太长 yadda yadda yadda,另外我必须保持页面打开。

如果我从 PHP 中执行此操作,我可能会将执行时间延长到所需的时间,但如果它确实引发错误,我无权终止进程,并且浏览器中不会显示任何内容,直到PHP 执行完成了吧?

我想知道是否有人有任何技巧来解决这个问题?刮板会在不同的时间间隔自行执行,我不需要一直看它。

干杯:)

【问题讨论】:

    标签: php web-crawler


    【解决方案1】:

    这样使用set_time_limit()

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

    【讨论】:

    • 谢谢老兄,我将把它与 flush() 干杯:)
    【解决方案2】:

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

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

    flush()

    (PHP 4,PHP 5)

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

    【讨论】:

    • 谢谢老兄,我将把它与 set_time_limit() 一起使用干杯:)
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-11
        • 1970-01-01
        • 1970-01-01
        • 2010-12-03
        • 2013-11-30
        • 1970-01-01
        • 1970-01-01
        • 2012-04-06
        相关资源
        最近更新 更多