Goutteを使ってproxyサーバ経由でスクレイピングをしたい
教えていただきたいこと
Goutte("fabpot/goutte": "^4.0")を使ってスクレイピングを実装しており、
その際にproxyサーバ経由でアクセスしたいと思っているのですが、うまくいかないため分かる方がいれば教えていただきたいです。
前提
前提としてLaravel7, PHP7.3を使用しています。
また、実行しているサーバの関係で、ライブラリを一部修正しています。
vendor\symfony\browser-kit\HttpBrowser.php
use Symfony\Component\HttpClient\CurlHttpClient;
class HttpBrowser extends AbstractBrowser
{
public function __construct(HttpClientInterface $client = null, History $history = null, CookieJar $cookieJar = null)
{
if (!$client && !class_exists(CurlHttpClient::class)) {
throw new \LogicException(sprintf('You cannot use "%s" as the CurlHttpClient component is not installed. Try running "composer require symfony/http-client".', __CLASS__));
}
$this->client = $client ?? new CurlHttpClient();
parent::__construct([], $history, $cookieJar);
}
やってみたこと
その状態で、以下のように記載すればできると思い実行したのですがエラーとなってしまいます。
CurlHttpClientでproxyを指定したときの方法に誤りがあるのかと思っているのですが、解決できず。
use Goutte\Client;
use Symfony\Component\HttpClient\CurlHttpClient;
$client = new Client(
new CurlHttpClient(['proxy' => 'http://192.0.2.1:8080'])
);
$crawler = $client->request('GET', 'https://スクレイピング対象');
以下のエラーが出力されています。
[previous exception] [object] (Symfony\\Component\\HttpClient\\Exception\\TransportException(code: 0): Timeout was reached for \"https://スクレイピング先URL\". at C:\\workspace\\vendor\\symfony\\http-client\\Response\\CurlResponse.php:323)
proxyに指定するIPとポートなどは、↓に表示されているのを使用しています。
https://www.freeproxylists.net/ja/
自己解決
以下の書き方で出来たみたいです。
→2021/12/27:やはりダメだったので、再度質問をオープンしました。
$client = new Client();
$crawler = $client->request('GET', 'スクレイピング先URL',
[
'proxy' => 'IP:PORT',
]);
0