我需要从网站抓取一些数据。目标服务器的一些原因,有些抓取不能成功,需要重试。代码如下:
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:当前节点列表为空。”
我该如何解决这个问题?
答案 0 :(得分:0)
因为我使用了Laravel,所以:
catch (\InvalidArgumentException $e) {...}
答案 1 :(得分:0)
尝试使用\InvalidArgumentException
(来自根名称空间,是)。
还考虑使用Guzzle的中间件(如this example)在HTTP级别重试。它更好,因为在这种情况下你可以处理与HTTP相关的错误。