PHP sudah menyediakan fungsi crawler website dengan menggunakan class DOMDocument, bawaan dari PHP. Untuk melakukan crawler kita harus tahu apa yang perlu kita ambil dari website, apakah di dalam tag meta <meta> atau di di body <body>.

Yang diperlukan hanya inspect element di halaman website, sehingga anda tahu pola bagian mana yang akan diambil. Firefox sudah ada firebug atau chrome juga suda ada inspect element. Hampir semua browser sudah support dengan yang namanya inspect element

langsung saja saya ambil contoh untuk crawler di website sintret.com. Buat file php baru kemudian copy paste dan coba script dibawah ini untuk fungsi grab images.

Grab Image

<h1>Grab Images dari website sintret.com </h1>
<?php
$url = 'http://sintret.com/';
$images = array();
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);
$imageTags = $dom->getElementsByTagName('img');
if ($imageTags)
    foreach ($imageTags as $tag) {
        $imagepaths = urldecode($tag->getAttribute('src'));
        $src = $tag->attributes->getNamedItem("src")->value;

//if ($imagepaths) {
        $images[] = $imagepaths;
//}
    }
echo '<pre>';print_r($images);
?>

Grab Title / Description dan Meta tags

<h1>Grab Title / Description / Meta  dari website sintret.com </h1>
<?php
$url = 'http://sintret.com/';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);

//grab title
$titles = $dom->getElementsByTagName("title");
if ($titles->length > 0) {
    $title = $titles->item(0)->textContent;
}

//grab meta
$metas = $dom->getElementsByTagName('meta');
for ($i = 0; $i < $metas->length; $i++) {
    $meta = $metas->item($i);
    if ($meta->getAttribute('name') == 'viewport')
        $viewport = $meta->getAttribute('content');
    if ($meta->getAttribute('name') == 'description')
        $description = $meta->getAttribute('content');
}

echo  'Title: ' . $title . '  ViewPort : ' . $viewport . ' / Description : ' . $description;

Grab Artikel summary di div class=col-md-9 tag p


<?php
$array = array();
$url = 'http://sintret.com/';
$dom = new DOMDocument();
@$dom->loadHTMLFile($url);

// $divs semua tag div kita ambil
$divs = $dom->getElementsByTagName('div');

//iterate tag div kita cari div class = "col-md-9" kemudian simpan
foreach ($divs as $div) {
    if ($div->getAttribute('class') == 'col-md-9') {
        $col_md_9 .= $div->ownerDocument->saveXML($div);
    }
}

// kita cari tag p dalam class col-md-9
$doc = new DOMDocument();
@$doc->loadHTML($col_md_9);

$ps = $doc->getElementsByTagName('p');
if ($ps->length > 0)
    foreach ($ps as $p) {
        $array[] = $p->nodeValue;
    }

echo '<pre>';print_r($array);

 

Leave a Comment:



digital_ocean