如何处理机器人代码中的错误

时间:2014-02-07 19:49:21

标签: php web-crawler

我已经构建了一个机器人,它基本上从根开始抓取网站,解析页面,保存所有内部链接,然后移动到链接列表中的第一页,解析它等等。

我知道它并没有真正优化在PHP中运行这种机器人,但因为它是我碰巧知道的唯一语言,这就是我选择的那种语言。

我遇到了各种各样的问题:页面返回404,然后页面被重定向,然后是不可解析的页面(几个页面在解析时返回几个单词的情况,但在发送GET时返回整个预期的主体) http请求)等...

无论如何,我认为我已经制作了机器人,因此它可以通过它解析的99.5%的页面,但是有些页面无法解析,此时我的机器人崩溃了(400个中的大约1页制作了机器人崩溃,崩溃,我的意思是,我只是得到一个致命的错误,代码只是停止然后)。

现在我的问题是:如何防止这种情况发生?我不是在问如何修复一个我甚至无法调试的错误(他们大部分时间都在外面调试,所以不太容易调试),我会知道如何处理这些错误。有没有办法刷新页面,以防出现某种类型的错误?有没有办法绕过那些致命的错误?

我无法看到向您展示任何类型代码的重点,但如果您觉得需要检查它的某个部分,我将会这样做。

谢谢

1 个答案:

答案 0 :(得分:1)

我能想到的最简单的方法是使用try {} catch(){}块。

[http://www.php.net/manual/en/language.exceptions.php] [1]

您将解析器的一部分放入try块中,如果抛出错误,请提供一些默认值并转到下一个链接。

如果你遇到了致命错误(我认为你无法尝试尝试),那么你也可以尝试将每个步骤下载/解析分解为一个单独的php文件,该文件使用需要查找的url进行调用卷曲。这种穷人的并行化会导致你承担很多开销,并且可能不一定是如何“应该”使用php,但应该有效。您还需要将结果存储在数据库/文本文件中。