【问题标题】:Call to undefined method Goutte\Client::setClient()调用未定义的方法 Goutte\Client::setClient()
【发布时间】:2021-05-11 01:28:05
【问题描述】:

我被这个错误困住了...... 但客户端已定义。

我的代码是这样的

use Goutte\Client;
use Illuminate\Http\Request;
use GuzzleHttp\Client as GuzzleClient;

class WebScrapingController extends Controller
{
    public function doWebScraping() 
    {
        $goutteClient = new Client();
        $guzzleClient = new GuzzleClient(array(
            'timeout' => 60,
            'verify' => false
        ));
        $goutteClient->setClient($guzzleClient);
        $crawler = $goutteClient->request('GET', 'https://duckduckgo.com/html/?q=Laravel');
        $crawler->filter('.result__title .result__a')->each(function ($node) {
            dump($node->text());
        });
    }
}

我认为这行有错误

$goutteClient->setClient($guzzleClient);

goutte:“^4.0”
guzzle:“7.0”
Laravel 框架:“6.20.4”


【问题讨论】:

  • 4.0版本不推荐setClient方法,直接在Goutte的构造函数中添加实例
  • 哦,我明白了。问题是它,谢谢@bhucho。用详细的解决方案做出答案,它可以帮助别人。

标签: php laravel web-scraping guzzle goutte


【解决方案1】:

这个答案是关于创建 Goutte 客户端的实例,一个简单的 PHP Web Scraper


对于版本 >= 4.0.0

直接在 Goutte Client 实例内部传递 HttpClient(guzzle httpclient , symfony httpclient) 实例。

use Goutte\Client;
use Symfony\Component\HttpClient\HttpClient;// or use GuzzleHttp\Client as GuzzleClient;

$client = new Client(HttpClient::create(['timeout' => 60]));
// or 
// $guzzleClient = new GuzzleClient(['timeout' => 60, 'verify' => false]); // pass this to Goutte Client

对于版本
use Goutte\Client;
use GuzzleHttp\Client as GuzzleClient;

$goutteClient = new Client();
$guzzleClient = new GuzzleClient(['timeout' => 60]);
$goutteClient->setClient($guzzleClient);

【讨论】:

  • 有没有办法在goutteClient中传递任何调试参数?
猜你喜欢
  • 1970-01-01
  • 2016-05-16
  • 2020-03-29
  • 1970-01-01
  • 2012-07-27
  • 2020-12-27
  • 2019-10-25
  • 2018-07-11
  • 2013-10-23
相关资源
最近更新 更多