PHP Goutte 尝试并重试

PHP Goutte try and retry

我需要从网站抓取一些数据。部分目标服务器原因,部分爬取无法成功,需要retry.The代码如下:

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: The current node list is empty."

我该如何解决这个问题?

因为我用的是Laravel,所以:

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

尝试使用 \InvalidArgumentException(从根命名空间,是的)。

同时考虑使用 Guzzle 的中间件(如 this example)在 HTTP 级别重试。更好,因为在这种情况下您处理的正是与 HTTP 相关的错误。