[라라벨] Job Schedule에 웹크롤링 걸기
라라벨을 이용한 크롤링(crawling) 만들기 2 - Job Schedule에 걸어두기
Job Schedule 과 Goutte\Client package를 사용하여 다른 사이트의 정보를 읽어오는 크롤링 프로그램 제작에 대한 예입니다.
참조 : Laravel 에서 Job Schedule 사용하기
goutte package install
여기서 사용할 Goutte\Client package를 인스톨 한다.
composer require fabpot/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