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 相关的错误。
我需要从网站抓取一些数据。部分目标服务器原因,部分爬取无法成功,需要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 相关的错误。