Laravel 使用 Goutte 错误抓取外部网站数据

Laravel Scrape External Website Data using Goutte Error

https://github.com/FriendsOfPHP/Goutte

composer.json:

"php": "^7.1.3",
        "fabpot/goutte": "^4.0",
        "fideloper/proxy": "^4.0",
        "guzzlehttp/guzzle": "^6.5",
        "laravel/framework": "^6.2",
        "laravel/passport": "^8.4",
        "laravel/tinker": "^2.0",
        "laravel/ui": "^1.2",
        "symfony/translation": "4.3.8"

控制器:

use Illuminate\Http\Request;
use App\Http\Requests;
use Goutte\Client;
use Symfony\Component\HttpClient\HttpClient;



class getStuff extends Controller
{
    public function get(Request $request) {

      $client = new Client();
      $crawler = $client->request('GET', 'https://www.symfony.com/blog/');

      return '';
}

错误:

Symfony\Component\Debug\Exception\FatalThrowableError
Return value of Symfony\Component\DomCrawler\Crawler::createSubCrawler() must be an instance of Symfony\Component\DomCrawler\object, instance of Symfony\Component\DomCrawler\Crawler returned

总是到$crawler = $client->request就断了。我终生无法弄清楚发生了什么。我尝试了不同的包,删除它,再次添加它。感谢您的协助!

我猜你的机器上安装了两个版本的 PHP。看起来你的命令行版本(运行s 作曲家)是 >= PHP 7.2,但是你的网络服务器的 PHP 版本 运行 是 < PHP 7.2.

symfony/dom-crawler中,版本5.0.0 更新了Crawler::createSubCrawler() 方法以具有object return 类型提示。它还将 PHP 版本依赖项更新为 ^7.2.5,因此除非 PHP 运行ning composer 的版本 >= ^7.2.5,否则不会安装此版本。 =16=]

但是,Web 服务器的 PHP 运行 版本似乎无法理解 object 类型提示,因此它正在寻找实际的 class命名为 Symfony\Component\DomCrawler\object。由于 PHP 不理解类型提示,这意味着版本 运行 代码是 < 7.2.0.

您需要确保 Web 服务器用于 运行 代码的 PHP 版本与 运行s 的 PHP 版本相同作曲家安装依赖项。