[라라벨] Job Schedule에 웹크롤링 걸기

[라라벨] Job Schedule에 웹크롤링 걸기 updated_at: 2024-04-25 16:00

라라벨을 이용한 크롤링(crawling) 만들기 2 - Job Schedule에 걸어두기

Job Schedule 과 Goutte\Client package를 사용하여 다른 사이트의 정보를 읽어오는 크롤링 프로그램 제작에 대한 예입니다.

참조 : Laravel 에서 Job Schedule 사용하기

goutte package install

여기서 사용할 Goutte\Client package를 인스톨 한다.

composer require fabpot/goutte

Goutte 자세한 사용법

Create Command

콘솔창에서 아래와 같은 명령어를 입력하면 App\Console\Commands\Crawling.php가 생성된다.

php artisan make:command Crawling

Crawling.php 편집

<?php
namespace App\Console\Commands;
.................
use Goutte\Client;

class Crawling extends Command
{
  protected $signature = 'crawling:stock';
  protected $description = '';
  ..........................
  public function handle()
  {
    $this->crawler();
  }


  private function crawler() {
    $url = '[target Url]';
    $client = new Client();
    $crawler = $client->request('GET', $url);

    $data = new \stdClass;
    $crawler->filter('strong.date')->each(function ($node) use($data) {
      $contents = $node->html();
      $data->displaytime = $contents;
    });

    $crawler->filter('#con_txt')->each(function ($node) use($data) {
      $contents = $node->html();
      $data->DB_data = $contents;
    });

    $crawler->filter('h5.adv > em')->each(function ($node, $i) use($data) {
      $contents = $node->html();
      switch($i) {
        case 0: $data->time = $contents;
        case 1: $data->object = $contents;
        case 2: $data->place = $contents;
        case 3: $data->color = $contents;
      }
    });
  }
}

Add To Kernel

<?php
namespace App\Console;
......................

class Kernel extends ConsoleKernel
{
  protected $commands = [
    'App\Console\Commands\Crawling',
  ];

  protected function schedule(Schedule $schedule)
  {
    $schedule->command('crawling:stock')->dailyAt('00:05');
  }
  ......................
}

Testing

console 에서 아래와 같이 입력하면 현재 제작된 내용을 실행해 볼 수도 있습니다.

$ php artisan crawling:stock
평점을 남겨주세요
평점 : 5.0
총 투표수 : 1