PHP 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())不起作用,我收到了

"生产。错误:无效参数异常:当前节点列表为空。

我该如何解决这个问题?

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

还可以考虑使用 Guzzle 的中间件在 HTTP 级别重试(如本例所示(。它更好,因为在这种情况下,您可以完全处理与HTTP相关的错误。

因为我使用了Laravel,所以:

catch (InvalidArgumentException $e) {...}

最新更新