php - 调用未定义的方法 Goutte\Client::setClient()
问题描述
我被这个错误困住了......但客户端已定义。
我的代码是这样的
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”
解决方案
这个答案是关于创建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
对于版本 <= 4.0.0(即从 0.1.0 到 3.3.1)
use Goutte\Client;
use GuzzleHttp\Client as GuzzleClient;
$goutteClient = new Client();
$guzzleClient = new GuzzleClient(['timeout' => 60]);
$goutteClient->setClient($guzzleClient);
推荐阅读
- c++ - 为什么我收到错误:“有多个默认构造函数”?
- python-3.x - Scrapy混合并重复来自不同页面的项目字段
- c# - foreach 循环不显示正确的结果
- android - 如何将模型类数据传递给hasmap?
- r - 在 R 中拟合 copula 模型
- xamarin - 使用页面之间的自定义移动在 Xamarin 表单中导航
- vb.net - 从特定文本中查找 MD5 字符串
- xaml - UWP ListView DataTemplate 绑定到项目而不是属性
- python - 需要帮助理解为什么我得到属性错误
- spreadsheet - 如何将可搜索数据插入一列,并在下一列中显示链接的可编辑数据?