Laravel/Goutte로 영화 제목 크롤링

영화 좋아하는 고민으로 "영화관을 사다리 때의 스케줄 조정이 아날로그"라는 것이 있습니다.
예를 들어, "오늘은 리멤버 미와 셰이프 오브 워터를 볼거야!"라고 숨을 거칠게 해도, 구글 선생님은 각각의 영화가 어디에서 몇시에 상영되는지는 가르쳐 줍니다만, 어떻게 루트에서 사다리하면 부드럽게 이동할 수 있는지 가르쳐 주지 않습니다.
그렇다면 스스로 만들 수밖에 없다. 그래서 먼저 영화의 상영 정보를 망라하기 위해 크롤링을 시작하려고합니다.

이 페이지 를 참고로 우선은 자신의 Laravel 프로젝트의 디렉토리로 이동해, laravel-goutte를 넣습니다
$ cd ~/Sites/goutte-sample //自分のLaravelプロジェクト名のディレクトリに移動
$ composer require weidner/goutte

명령을 치고 잠시 기다립니다. 성공하면 "Package manifest generated successfully."라는 메시지가 나옵니다.

그런 다음 Laravel 프로젝트의 디렉토리에있는 composer.json 파일에 다음과 같이 추가

composer.json
{
    "require": {
        "php": ">=7.0.0",
        "fideloper/proxy": "~3.3",
        "laravel/framework": "5.5.*",
        "laravel/tinker": "~1.0",
        "weidner/goutte": "^1.0" // ここです
    },

마찬가지로 config/app.php에도 추가

config/app.php

return [

    'providers' => [

        // ...

        /*
         * Package Service Providers...
         */
        Weidner\Goutte\GoutteServiceProvider::class, // ここと

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,

    ],

    // ...

    'aliases' => [

        'App' => Illuminate\Support\Facades\App::class,
        'Artisan' => Illuminate\Support\Facades\Artisan::class,

        // ...

        'Goutte' => Weidner\Goutte\GoutteFacade::class, // ここです
        'Hash' => Illuminate\Support\Facades\Hash::class,

        // ...
    ],

];

이제 준비가 되었습니다. laravel-goutte의 Github 페이지 readme에는 다음 샘플이 있습니다.
파일은 routes/web.php

routes/web.php
Route::get('/', function() {
   $crawler = Goutte::request('GET', 'https://duckduckgo.com/html/?q=Laravel');
   $crawler->filter('.result__title .result__a')->each(function ($node) {
      dump($node->text());
   });
   return view('welcome');
});

이번에는 영화의 정보를 취득하고 싶기 때문에, 업링크 시부야에서 2018년 3월 30일 시점에서 상영중인 영화의 타이틀을 취득하는 코드를 썼습니다.

routes/web.php
<?php
   // アップリンクで現在上映されている映画を取得する
   $crawler = Goutte::request('GET', 'http://www.uplink.co.jp/movie-show/nowshowing');
   $crawler->filter('article.post h2 a')->each(function ($node) {
     echo $node->text();
     echo '<br/>';
   });
   return view('welcome');
});

결과는 다음과 같습니다. 무사히 얻을 수있는 것 같습니다.


이번은 크롤러를 움직인 정도의 기사입니다만, 향후는 아래와 같은 대응이 필요하게 됩니다.
①페이지를 전환하여 취득
②영화별 상영시간 취득
③ 취득한 데이터의 DB 저장

검색하고 있어도 일본어로 돈피샤인 기사가 그다지 없었으므로, 아래의 기사를 참조로 진행해 가려고 생각합니다.
FriendsOfPHP/Goutte
Goutte에서 더 많은 정보를 원한다면 아래를 읽으십시오.
BrowserKit component
CssSelector Component DomCrawler Component
↑ 이름적으로 이것이 제일 참고가 될 것 같다
Guzzle Documentation

좋은 웹페이지 즐겨찾기