【发布时间】:2021-09-01 10:42:51
【问题描述】:
我正在尝试使用 Laravel、Goutte 和 Guzzle 对网页进行翻页。我正在尝试将一个 guzzle 实例传递给 Goutte,但我的 Web 服务器一直在尝试使用 Symfony\Contracts\HttpClient\HttpClientInterfac。这是我得到的确切错误:
Argument 1 passed to Symfony\Component\BrowserKit\HttpBrowser::__construct() must be an instance of Symfony\Contracts\HttpClient\HttpClientInterface or null, instance of GuzzleHttp\Client given, called in /opt/bitnami/apache/htdocs/app/Http/Controllers/ScrapeController.php on line 52
line 52 指的是这一行:$goutteClient = new Client($guzzleclient);
这是我的课。如何强制它使用 Goutte 而不是 Symfony?
将行更改为:$goutteClient = new \Goutte\Client($guzzleclient); 不会修复它。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Goutte\Client;
use GuzzleHttp\Cookie;
use GuzzleHttp\Client as GuzzleClient;
class ScrapeController extends Controller
{
public function index()
{
return view(‘index’);
}
public function scrape() {
$url = ‘www.domain.com;
$domain = ‘www.domain.com’;
$cookieJar = new \GuzzleHttp\Cookie\CookieJar(true);
// get the cookie from www.domain.com
$cookieJar->setCookie(new \GuzzleHttp\Cookie\SetCookie([
'Domain' => “www.domain.com”,
'Name' => ‘_name_session',
'Value' => ‘value’,
'Discard' => true
]));
$guzzleClient = new \GuzzleHttp\Client([
'timeout' => 900,
'verify' => false,
'cookies' => $cookieJar
]);
$goutteClient = new Client($guzzleClient);
$crawler = $goutteClient->request('GET', $url);
$crawler->filter('table')->filter('tr')->each(function ($node) {
dump($node->text());
});
}
}
【问题讨论】:
标签: laravel web-scraping goutte guzzle