PHP Goutte尝试重试

时间:2017-07-16 14:03:07

标签: php web-crawler guzzle goutte

我需要从网站抓取一些数据。目标服务器的一些原因,有些抓取不能成功,需要重试。代码如下:

private function fetchArchive($id) {
        $url = 'xxxx/' . $id;

        $attempt = 0;
        $base = null;
        if (Goutte::request('GET', $url)->filter('#table')->count() < 1) {
            do {
                try {
                    $base = Goutte::request('GET', $url)->filter('#table')->text();
                } catch (InvalidArgumentException $e) {
                    $attempt++;
                    sleep(2);
                    break;
                }

            } while ($attempt <= 5);
        }

事实上try($base = Goutte::request('GET', $url)->filter('#table')->text())不起作用,我收到了

  

“production.ERROR:InvalidArgumentException:当前节点列表为空。”

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

因为我使用了Laravel,所以:

catch (\InvalidArgumentException $e) {...}

答案 1 :(得分:0)

尝试使用\InvalidArgumentException(来自根名称空间,是)。

还考虑使用Guzzle的中间件(如this example)在HTTP级别重试。它更好,因为在这种情况下你可以处理与HTTP相关的错误。