Hi, kali ini saya akan mencoba menjelaskan bagaimana cara membuat web
crawler sederhana. Oh ya, web crawler adalah program seperti robot yang
akan menjelajahi dunia web dan kemudian mendownload halaman web
tersebut.
Secara garis besar sebuah web crawler memiliki 3 bagian, yaitu:
1. Penentu url (alamat web) tujuan
2. Downloader web
3. Pemarsing (pemroses) hasil downloadan
Mari kita bahas satu persatu.
1. Penentu url(alamat web) tujuan.
Bagian ini akan mengambil 1 url dari database yang belum diproses.
03 | $sql = "SELECT id, url FROM tbl_url WHERE status='0' ORDER BY id LIMIT 1" ; |
04 | $rs = mysql_query( $sql ); |
06 | if ( $data = mysql_fetch_array( $rs )) |
10 | $sql = "UPDATE tbl_url SET status='1' WHERE id='" . $data ['id ']. "' "; |
11 | $rs = mysql_query( $sql ); |
2. Downloader Web
Fungsi getURL dibawah ini akan menerima $url berisi url tujuan dan akan
mengembalikan html nya, sebenarnya kita bisa menggunakan fungsi
file($url).
01 | function getURL( $url , $delay =0) { |
04 | $delay = intval ( $delay ); |
07 | curl_setopt( $ch , CURLOPT_URL, $url ); |
08 | curl_setopt( $ch , CURLOPT_HEADER, 0); |
09 | curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); |
10 | curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1); |
11 | curl_setopt( $ch , CURLOPT_MAXREDIRS, 5); |
13 | curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 60); |
14 | curl_setopt( $ch , CURLOPT_TIMEOUT, $delay ); |
17 | curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 60); |
18 | curl_setopt( $ch , CURLOPT_TIMEOUT, 60); |
20 | $result = curl_exec( $ch ); |
3. Pemarsing (pemroses) hasil downloadan
Fungsi parseHTML akan menerima string html kemudian mengekstrak semua
link yang ada di string tersebut. Link tadi akan diambil domainnya saja
untuk kemudian disimpan ke dalam database.
01 | function parseHTML( $html ) |
03 | if (preg_match_all( "/<a href=\"(.*?)\"/i" , $html , $match )) { |
04 | foreach ( $match [1] as $row ) { |
05 | $domain = getDomain( $row ); |
08 | db_insert_url( $domain ); |
Berikut ini adalah source code lengkapnya.
003 | $db = mysql_connect( 'localhost' , 'phpkita' , 'phpkita' ); |
004 | mysql_select_db( 'db_phpkita' , $db ); |
010 | $html = getURL( $url ); |
011 | db_update_html( $url , $html ); |
023 | $sql = "SELECT id, url FROM tbl_url WHERE status='0' ORDER BY id LIMIT 1" ; |
024 | $rs = mysql_query( $sql ); |
026 | if ( $data = mysql_fetch_array( $rs )) |
030 | $sql = "UPDATE tbl_url SET status='1' WHERE id='" . $data ['id ']. "' "; |
031 | $rs = mysql_query( $sql ); |
038 | function getURL( $url , $delay =0) { |
041 | $delay = intval ( $delay ); |
044 | curl_setopt( $ch , CURLOPT_URL, $url ); |
045 | curl_setopt( $ch , CURLOPT_HEADER, 0); |
046 | curl_setopt( $ch , CURLOPT_RETURNTRANSFER, 1); |
047 | curl_setopt( $ch , CURLOPT_FOLLOWLOCATION, 1); |
048 | curl_setopt( $ch , CURLOPT_MAXREDIRS, 5); |
050 | curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 60); |
051 | curl_setopt( $ch , CURLOPT_TIMEOUT, $delay ); |
054 | curl_setopt( $ch , CURLOPT_CONNECTTIMEOUT, 60); |
055 | curl_setopt( $ch , CURLOPT_TIMEOUT, 60); |
057 | $result = curl_exec( $ch ); |
064 | function parseHTML( $html ) |
066 | if (preg_match_all( "/<a href=\"(.*?)\"/i" , $html , $match )) { |
067 | foreach ( $match [1] as $row ) { |
068 | $domain = getDomain( $row ); |
071 | db_insert_url( $domain ); |
077 | function db_insert_url( $url ) |
079 | $url = mysql_real_escape_string( $url ); |
080 | $sql = "INSERT INTO tbl_url (url, html, status) VALUES ('$url', '', '0')" ; |
081 | $rs = mysql_query( $sql ); |
084 | function db_update_html( $url , $html ) |
086 | $url = mysql_real_escape_string( $url ); |
087 | $html = mysql_real_escape_string( $html ); |
088 | $sql = "UPDATE tbl_url SET html='$html' WHERE url='$url' " ; |
089 | $rs = mysql_query( $sql ); |
092 | function getDomain( $url ) |
095 | if (preg_match( "/^(http:\/\/[\d|\w|-|_|.]+)/i" , $url , $match )) { |
O, jangan lupa untuk membuat table nya juga.
1 | CREATE TABLE `tbl_url` ( |
2 | `id` int(8) NOT NULL AUTO_INCREMENT, |
3 | `url` varchar(128) NOT NULL, |
5 | `status` int(1) NOT NULL DEFAULT '0' , |
7 | UNIQUE KEY `url` (`url`) |
Demikianlah cara membuat web crawler yang sederhana. Untuk tahap
selanjutnya, kamu bisa menambahkan fungsi filter untuk menentukan url
mana saja yang akan disimpan dan mana yang akan diabaikan.
sumber
0 komentar:
Posting Komentar