#概要
以下の4点についてまとめます。
- Goutteの導入
- Goutteの設定
- データの取得方法
- 取得データの表示
#Goutteの導入
作成中のLaravelフォルダに、cd
コマンドで移動後、コンポーザーをダウンロード
コマンドライン
$ composer require weidner/goutte
#Goutteの設定
configフォルダのapp.phpファイルに
Weidner\Goutte\GoutteServiceProvider::class,
'Goutte' => Weidner\Goutte\GoutteFacade::class,
を追加
config/app.php
'providers' => [
//省略
/*
* Package Service Providers...
*/
//ここに一行追加----------------------------------//
Weidner\Goutte\GoutteServiceProvider::class,
/*
* Application Service Providers...
*/
App\Providers\AppServiceProvider::class,
App\Providers\AuthServiceProvider::class,
//省略
]
'aliases' => [
//省略
'Event' => Illuminate\Support\Facades\Event::class,
'File' => Illuminate\Support\Facades\File::class,
'Gate' => Illuminate\Support\Facades\Gate::class,
//ここに一行追加-------------------------------------//
'Goutte' => Weidner\Goutte\GoutteFacade::class,
'Hash' => Illuminate\Support\Facades\Hash::class,
'Lang' => Illuminate\Support\Facades\Lang::class,
'Log' => Illuminate\Support\Facades\Log::class,
//省略
]
#データの取得方法
スクレイピングしてきた情報を表示したいページのコントローラーに、以下の内容を記述
SampleController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
//ここに一行追加-------------------------------------//
use Weidner\Goutte\GoutteFacade as GoutteFacade;
class SampleController extends Controller
{
public function index()
{
// ここではアマゾンカメラランキングをスクレイピング
$goutte = GoutteFacade::request('GET', 'https://www.amazon.co.jp/gp/bestsellers/electronics/3946818051?ref_=Oct_BSellerC_3946818051_SAll&pf_rd_p=7019a35e-d4ad-5da4-8fdd-f9f5c8ef9428&pf_rd_s=merchandised-search-10&pf_rd_t=101&pf_rd_i=3946818051&pf_rd_m=AN1VRQENFRJN5&pf_rd_r=61C7KYXHQFEAY80RGM67&pf_rd_r=61C7KYXHQFEAY80RGM67&pf_rd_p=7019a35e-d4ad-5da4-8fdd-f9f5c8ef9428');
//画像を取得するための配列を準備
$images = array();
//テキストを取得するための配列を準備
$texts = array();
//画像のsrc部分を取得
$goutte->filter('.a-dynamic-image')->each(function ($node) use (&$images) {
$images[] = $node->attr('src');
});
//テキストを取得
$goutte->filter('.p13n-sc-truncate')->each(function ($node) use (&$texts) {
$texts[] = $node->text();
});
$params = [
'images' => $images,
'texts' => $texts,
];
return view('index', $params);
}
}
詳しく解説すると、
use Weidner\Goutte\GoutteFacade as GoutteFacade;
を追加し、
$goutte = GoutteFacade::request('GET', 'URL');
を記述する。URLの部分は、自分が情報を取得したいページのURLを記述する。
次に、
$sample = array();
を記述し、取得した情報を入れる配列を用意。**$sample(変数)**の部分は自分で決めて良い。
最後に、
$goutte->filter('.sample')->each(function ($node) use (&$sample) {
$sample[] = $node->text();
});
を記述し、情報を取得する。
**.sample(クラス名)**の部分は、自分が情報を取得したいページで、検証を行い、該当箇所のクラス名を取得してくる。
&$sampleと、$sampleの部分は、先ほど用意した配列の変数名を記述する。
#取得データの表示
あとは簡単です。Viewに表示の記述を追加して終了です。
sample.blade.php
@for($i = 0; $i < count($texts); $i++)
<p>{{ $texts[$i] }}</p>
@endfor
以上です。