Goutte(グート)を使ったLaravel スクレイピング 

#概要
以下の４点についてまとめます。
- Goutteの導入
- Goutteの設定
- データの取得方法
- 取得データの表示

#Goutteの導入
作成中のLaravelフォルダに、`cd`コマンドで移動後、コンポーザーをダウンロード

```ruby:コマンドライン
$ composer require weidner/goutte
```

#Goutteの設定
configフォルダのapp.phpファイルに
`Weidner\Goutte\GoutteServiceProvider::class, `
`'Goutte' => Weidner\Goutte\GoutteFacade::class,`を追加

```php: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,

    //省略
]
```

#データの取得方法

スクレイピングしてきた情報を表示したいページのコントローラーに、以下の内容を記述

```php: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);
    }
}
```
詳しく解説すると、

```php
use Weidner\Goutte\GoutteFacade as GoutteFacade;
```
を追加し、

```php
$goutte = GoutteFacade::request('GET', 'URL');
```
を記述する。**URL**の部分は、**自分が情報を取得したいページのURL**を記述する。
次に、

```php
$sample = array();
```
を記述し、取得した情報を入れる配列を用意。**$sample(変数)**の部分は自分で決めて良い。
最後に、

```php
$goutte->filter('.sample')->each(function ($node) use (&$sample) {
            $sample[] = $node->text();
        });
```

を記述し、情報を取得する。
**.sample(クラス名)**の部分は、自分が情報を取得したいページで、検証を行い、該当箇所のクラス名を取得してくる。

**&$sample**と、**$sample**の部分は、先ほど用意した配列の変数名を記述する。

#取得データの表示

あとは簡単です。Viewに表示の記述を追加して終了です。

```php:sample.blade.php
@for($i = 0; $i < count($texts); $i++)
  <p>{{ $texts[$i] }}</p>
@endfor
```

以上です。