Menu
Mansyur.Net
  • My Schedule
Mansyur.Net

Web Crawling dengan Library PHP Simple HTML DOM Parser

Posted on August 22, 2014May 5, 2019

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:

  1.  simple_html_dom.php adalah file library yang menyimpan class untuk melakukan proses crawling.
  2. 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.
  3.  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

index.php
PHP
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.

index.php
PHP
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.

index.php
PHP
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 //.

index.php
PHP
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:

index.php
PHP
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.

index.php
PHP
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:

  1. Manning, C. D. (2008). Introduction to Information Retrieval. Cambridge University Press.
  2.  http://subinsb.com/how-to-create-a-simple-web-crawler-in-php

 

3 thoughts on “Web Crawling dengan Library PHP Simple HTML DOM Parser”

  1. raga nufusila says:
    April 16, 2016 at 7:35 PM

    maaf pak mansyur, saya boleh minta source kodenya ngga ? saya uda coba download diatas tp tidk jalan

  2. raga nufusila says:
    April 16, 2016 at 8:00 PM

    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

  3. suyamto says:
    February 2, 2019 at 10:57 AM

    Makasih infonya dapat pencerahan baru sukses selalu

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Categories

  • Campus
  • Networking
  • Opinion

Sponsor

©2021 Mansyur.Net | Powered by SuperbThemes & WordPress