lang/php

PHP Gouttle DomCrawler Component

C/H 2018. 7. 2. 08:30

Goutte 설치

composer install fabpot/goutte

Crawler 컨텐츠 탐색 방법

Get Crawler Content

require 'vendor/autoload.php';

use Goutte\Client;
use Symfony\Component\DomCrawler\Crawler;

$domain = 'http://www.etoland.co.kr';
$url = $domain.'/bbs/board.php?bo_table=star';

$client = new \Goutte\Client();
$client->setClient(new \GuzzleHttp\Client([ 
        'timeout' => 90, 
        'verify' => false, 
        'cookie'=>true, 
        // 'debug' => true, 
    ]))->setServerParameters(['HTTP_USER_AGENT' => "'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.110 Safari/537.36"]);
$crawler = $client->request('GET', $url);

each callback

$crawler->filter('#fboardlist tr')->each(function($node, $i){
    if( $i > 1 && $node->filter('a')->count() && ! preg_match("#\[공지\]#", $node->text()) )
    {
        global $domain;
        $cate = str_replace(['[',']'], '', $node->filter('a')->eq(0)->text());
        $name = $node->filter('a')->eq(1)->text();
        $href = $domain.str_replace('../', '/', $node->filter('a')->eq(1)->attr('href'));
     
        echo "{$cate} : {$name} {$href}\n";
    }
});

return each callback

$item = $crawler->filter('#fboardlist tr')->each(function($node, $i){
    if( $i > 1 && $node->filter('a')->count() && ! preg_match("#\[공지\]#", $node->text()) )
    {
        global $domain;
        return [
            'cate' => str_replace(['[',']'], '', $node->filter('a')->eq(0)->text()),
            'name' => $node->filter('a')->eq(1)->text(),
            'href' => $domain.str_replace('../', '/', $node->filter('a')->eq(1)->attr('href')),
        ];
    }
});
var_dump( $item );

foreach new Crawler

$item = [];
foreach($crawler->filter('#fboardlist tr') AS $i => $node)
{
    $node = new Crawler($node);
    if( $i > 1 && $node->filter('a')->count() && ! preg_match("#\[공지\]#", $node->text()) )
    {
        $item[] = [
            'cate' => str_replace(['[',']'], '', $node->filter('a')->eq(0)->text()),
            'name' => $node->filter('a')->eq(1)->text(),
            'href' => $domain.str_replace('../', '/', $node->filter('a')->eq(1)->attr('href')),
        ];
    }
};
var_dump( $item );


반응형