Menurut Christopher D. Manning, web crawling adalah suatu proses mengumpulkan dan pengindex-an halaman dari berbagai website yang kemudian digunakan untuk mendukung suatu mesin pencari. Tujuan dari proses ini adalah melakukan pengumpulan informasi yang berguna secara efektif dan efisien serta menghubungkan struktur informasi antara satu dengan lainnya yang saling berkaitan. Web crawling dikenal juga dengan istilah robot atau spider. Selain untuk kebutuhan mesin pencari, web crawler juga digunakan untuk kebutuhan web archiving, web data mining dan web monitoring.
Berikut adalah script crawling sederhana menggunakan sebuah library PHP Simple HTML DOM Parser yang dapat didownload disini. Contoh ini terdiri dari 3 file yaitu:
- simple_html_dom.php adalah file library yang menyimpan class untuk melakukan proses crawling.
- index.php adalah file yang digunakan sebagai file untuk menyimpan script formulir masukan dari pengguna sekaligus script untuk memanggil library PHP Simple HTML DOM Parser untuk melakukan crawling.
- dataku.html adalah file yang digunakan sebagai file penulisan hasil url yang berhasil disubmit oleh pengguna.
Berikut merupakan penjelasan umum mengenai script yang ada pada file index.php
Pada bagian ini dibuat form input untuk memasukan URL yang akan dicrawling. Agar pengguna mengetahui contoh format URL maka akan dimasukan plasceholder default http://www.Mansyur.Net
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<html> <head> <title>Web Crawler dengan PHP Simple HTML DOM Parser</title> </head> <body> <div id="content" style="margin-top:10px;height:100%;"> <center><h1>Web Crawler dengan PHP Simple HTML DOM Parser</h1></center> <form action="index.php" method="POST"> URL : <input name="url" size="35" placeholder="http://www.Mansyur.Net"/> <input type="submit" name="submit" value="Crawling"/> </form> <br/> <b>URL yang dimasukan akan tersimpan</b><br/>Lihat URL <a href="dataku.html">disini</a>. |
Selanjutnya akan memanggil file library PHP Simple HTML DOM Parser dan membuat variable $crawled_urls=array(); dan $found_urls=array();. Pada file library sudah tersimpan class dan kumpulan fungsi untuk crawler yang dapat digunakan untuk melakukan operasi crawling.
1 2 3 |
include("simple_html_dom.php"); $crawled_urls=array(); $found_urls=array(); |
Script selanjutnya merupakan fungsi yang digunakan untuk melakukan konversi jenis URL Relative menjadi URL Absolute. Proses ini dilakukan agar URL hasil crawling dapat diakses dengan benar atau lengkap.
1 2 3 4 5 6 7 8 9 10 11 12 |
function rel2abs($rel, $base){ if (parse_url($rel, PHP_URL_SCHEME) != '') return $rel; if ($rel[0]=='#' || $rel[0]=='?') return $base.$rel; extract(parse_url($base)); $path = preg_replace('#/[^/]*$#', '', $path); if ($rel[0] == '/') $path = ''; $abs = "$host$path/$rel"; $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#'); for($n=1; $n>0;$abs=preg_replace($re,'/', $abs,-1,$n)){} $abs=str_replace("../","",$abs); return $scheme.'://'.$abs; } |
Fungsi selanjutnya akan digunakan untuk merubah format URL yang ditemukan. Aspek yang akan dicek adalah pada format penulisan URL yang digunakan. Misalnya pada 4 awal karakter diisi dengan nama protokol http kemudian titik dua dan dua karakter //.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function perfect_url($u,$b){ $bp=parse_url($b); if(($bp['path']!="/" && $bp['path']!="") || $bp['path']==''){ if($bp['scheme']==""){$scheme="http";}else{$scheme=$bp['scheme'];} $b=$scheme."://".$bp['host']."/"; } if(substr($u,0,2)=="//"){ $u="http:".$u; } if(substr($u,0,4)!="http"){ $u=rel2abs($u,$b); } return $u; } |
Jika target sudah valid maka selanjutnya akan digunakan fungsi crawling yang akan meng-crawling URL dan menulisakan waktu proses crawling sebagai berikut:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
function crawl_site($u){ global $crawled_urls; $uen=urlencode($u); if((array_key_exists($uen,$crawled_urls)==0 || $crawled_urls[$uen] < date("YmdHis",strtotime('-25 seconds', time())))){ $html = file_get_html($u); $crawled_urls[$uen]=date("YmdHis"); foreach($html->find("a") as $li){ $url=perfect_url($li->href,$u); $enurl=urlencode($url); if($url!='' && substr($url,0,4)!="mail" && substr($url,0,4)!="java" && array_key_exists($enurl,$found_urls)==0){ $found_urls[$enurl]=1; echo "<li><a target='_blank' href='".$url."'>".$url."</a></li>"; } } } } |
Bagian akhir script adalah digunakan untuk error handling jika pengguna tidak memasukan URL, jika URL berhasil dimasukan maka URL akan ditulis pada file dataku.html. Informasi yang ditulis pada file dataku.html adalah link dan waktu crawling.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
if(isset($_POST['submit'])){ $url=$_POST['url']; if($url==''){ echo "<h2>URL yang dimasukan salah.</h2>"; }else{ $f=fopen("dataku.html","a+"); fwrite($f,"<div><a href='$url'>$url</a> - ".date("Y-m-d H:i:s")."</div>"); fclose($f); echo "<h2>Hasil URL yang ditemukan</h2><ul style='word-wrap: break-word;width: 400px;line-height: 25px;'>"; crawl_site($url); echo "</ul>"; } } ?> </div> <style> input{ border:none; padding:8px; } </style> </body> </html> |
Script index.php telah selesai dan untuk melihat URL target yang dicrawling dapat membuka file dataku.html. Demo dapat dicoba disini
Sumber Referensi:
- Manning, C. D. (2008). Introduction to Information Retrieval. Cambridge University Press.
- http://subinsb.com/how-to-create-a-simple-web-crawler-in-php
maaf pak mansyur, saya boleh minta source kodenya ngga ? saya uda coba download diatas tp tidk jalan
Notice: Undefined variable: found_urls in C:\xampp\htdocs\crwl\index.php on line 58
Warning: array_key_exists() expects parameter 2 to be array, null given in C:\xampp\htdocs\crwl\index.php on line 58
Makasih infonya dapat pencerahan baru sukses selalu