2017-07-16 9 views
0

ウェブサイトからデータをクロールする必要があります。PHP Goutte tryと再試行

が実際 try($base = Goutte::request('GET', $url)->filter('#table')->text())
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); 
     } 

が動作しないと私は

"production.ERROR: InvalidArgumentException: The current node list is empty."

はどのように受け取る:ターゲットサーバの理由のいくつかは、いくつかのクロールは成功しません、次のようにコードがあるretry.Theする必要があります私はこれを修正した?

答えて

0

は(はい、ルート名前空間から)\InvalidArgumentExceptionを使用してみてください。

Guzzのミドルウェア(this exampleなど)を使用してHTTPレベルで再試行することも検討してください。この場合は、HTTP関連のエラーを正確に処理するので、より良いことです。

0

私はそう、Laravelを使用しているので:

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