Tutorial tentang bagaimana cara mengambil data / grabbing dari situs

Beberapa saat lalu di fanpage facebook kami ada yang meminta tutorial tentang bagaimana cara mengambil data / grabbing dari situs. Bagi beberapa orang belum tahu bagaimana manfaat dari grabbing ini, dengan grabbing ini developer dapat mengambil data dari situs yang diinginkan dengan tujuan ingin mengambil data yang diperlukan untuk keperluan development mereka. Tetapi tidak seperti facebook dan twitter, banyak situs situs populer yang tidak memberikan API untuk mengakses data mereka sehingga tidak mungkin kita bisa mendapatkan data mereka melalui program kita.

Kali ini saya akan memberikan tutorial bagaimana cara mengambil konten / data dari situs sehingga data mereka dapat kita ambil dan kita manfaatkan. Sebagai contoh kali ini saya akan mencoba mengambil konten berita dari situs Kompas.com menggunakan pemrogramman PHP melalui cURL dan HTML DOM, langsung saja kita mulai :

Pertama kita harus mengetahui struktur dari website yang akan kita ambil kontennya, pertama kita lihat dan inspect element  bagian yang ingin kita ambil kontennya:


Setelah kita tahu bagian yang mana ingin kita ambil selanjutnya kita lihat inspect element 

setelah itu kita bisa langsung membuat syntaxnya.pertama buat dulu syntax curl,sebelumnya karena induk yang akan kita ambil kontennya tidak memiliki ID sebegai penggantinya kita akan mengambil menggunakan class disini saya buat fungsi agar mudah dipakai

?
1
2
3
4
5
6
7
8
9
10
11
12
13
function bacaHTML($url){
    // inisialisasi CURL
    $data = curl_init();
    // setting CURL
    curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($data, CURLOPT_URL, $url);
    // menjalankan CURL untuk membaca isi file
    $hasil = curl_exec($data);
    curl_close($data);
    return $hasil;
}
setelah itu kita akan inisialisasi DOM HTML sekaligus mencoba fungsi diatas dan mengambilkompas.com . Sisispkan syntax dibawah ini di bawah fungsi diatas
?
1
2
3
4
5
6
7
8
//mengambil data dari kompas
$bacaHTML = bacaHTML("http://www.kompas.com");
//membuat dom dokumen
$dom = new DomDocument();
//mengambil html dari kompas untuk di parse
@$dom->loadHTML($bacaHTML);

Sampai disini kita hanya berhasil memanggil seluruh html dari kompas.com selanjutnya kita akan mengambil kontent tertentu dari html menggunakan DOM HTML. 
?
1
2
3
4
5
6
//nama class yang akan dicari
$classname="most";
//mencari class memakai dom query
$finder = new DomXPath($dom);
$spaner = $finder->query("//*[contains(@class, '$classname')]");

dengan syntax diatas kita dapat mngambil data dari semua tag yang memiliki class most, saat saya menguji karena menggunakan class, DOM menerima 3 class most , padahal kita hanya membutuhan most yang pertama saja, maka itu juga bisa dilakakukan di DOM. Sekalian kita akan mengambil kontent dari setiap baris li dari induknya ul . Sebelumnya mari kita lihat dulu tag konten yang akan kita ambil.


setelah kita tahu maka kita akan langsung mengambil isi dari tag tersebut. Maka sisipkan syntax berikut dibawah syntax sebelumnya
?
1
2
3
4
5
6
//mengambil data dari class yang pertama
$span = $spaner->item(0);
//dari class pertama mengambil 2 elemen yaitu a yang menyimpan judul dan link dan span yang menyimpan tanggal
$link $span->getElementsByTagName('a');
$tanggal = $span->getElementsByTagName('span');

Dengan itu kita akan mengambil seluruh link dan tanggal dari tag masing masing,  tetapi pada saat ini kedua variable itu masih berbentuk array dom, maka kita akan merapihkannya menjadi array normal dengan menyisipkan lagi syntax berikut.
?
1
2
3
4
5
6
7
8
9
10
11
12
//persiapkan array untuk diambil datanya
$data =array();
foreach ($link as $val){
    $data[] = array(
        'judul' => $link->item($no)->nodeValue,
        'link' => $link->item($no)->getAttribute('href'),
        'tanggal' => $tanggal->item($no)->nodeValue,
    );
    $no++;
}
?>
Syntax diatas untuk nodeValue itu untuk mengambil isi dari tag, sedangkan getAttribute untuk mengambil attribut. Sampai tahap ini kita sudah selesai mengambil data selanjutnya kita akan menampilkannya dengan cara mengeluarkan seluruh data yang ada pada $data dengan sytax ini
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
<style>
    table,th,td{
        border:1px solid #000;
        font-size:12px;
    }
</style>
<h2>Grabbing dari Kompas.com</h2>
<table>
    <thead>
        <th>No</th>   
        <th>Judul</th>   
        <th>Link</th>   
        <th>Tanggal</th>   
    </thead>
    <tbody>
        php
$no=1;
foreach($data as $val)
{
        ?>
        <tr>
            <td>php echo $no;?></td>
            <td>php echo $val['judul'];?></td>
            <td>php echo $val['link'];?></td>
            <td>php echo $val['tanggal'];?></td>
        </tr>
        php
    $no++;
}
        ?>
    </tbody>
</table>

dengan begitu kita selesai melakukan pengambilan data dan mengeluarkannya dalam bentuk tabel.

Ini keseluruhan sytax nya atau kamu bisa download dibawah nanti.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
php
function bacaHTML($url){
    // inisialisasi CURL
    $data = curl_init();
    // setting CURL
    curl_setopt($data, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($data, CURLOPT_URL, $url);
    // menjalankan CURL untuk membaca isi file
    $hasil = curl_exec($data);
    curl_close($data);
    return $hasil;
}
//mengambil data dari kompas
$bacaHTML = bacaHTML("http://www.kompas.com");
//membuat dom dokumen
$dom = new DomDocument();
//mengambil html dari kompas untuk di parse
@$dom->loadHTML($bacaHTML);
//nama class yang akan dicari
$classname="most";
//mencari class memakai dom query
$finder = new DomXPath($dom);
$spaner = $finder->query("//*[contains(@class, '$classname')]");
//mengambil data dari class yang pertama
$span = $spaner->item(0);
//dari class pertama mengambil 2 elemen yaitu a yang menyimpan judul dan link dan span yang menyimpan tanggal
$link =  $span->getElementsByTagName('a');
$tanggal = $span->getElementsByTagName('span');
$no = 0;
//persiapkan array untuk diambil datanya
$data =array();
foreach ($link as $val){
    $data[] = array(
        'judul' => $link->item($no)->nodeValue,
        'link' => $link->item($no)->getAttribute('href'),
        'tanggal' => $tanggal->item($no)->nodeValue,
    );
    $no++;
}
?>
<style>
    table,th,td{
        border:1px solid #000;
        font-size:12px;
    }
</style>
<h2>Grabbing dari Kompas.com</h2>
<table>
    <thead>
        <th>No</th>   
        <th>Judul</th>   
        <th>Link</th>   
        <th>Tanggal</th>   
    </thead>
    <tbody>
        php
$no=1;
foreach($data as $val)
{
        ?>
        <tr>
            <td>php echo $no;?></td>
            <td>php echo $val['judul'];?></td>
            <td>php echo $val['link'];?></td>
            <td>php echo $val['tanggal'];?></td>
        </tr>
        php
    $no++;
}
        ?>
    </tbody>
</table>

Mari kita Uji Coba dan inilah hasilnya


Beri +1,like atau share jika bermanfaat, jangan lupa juga komen jika mengalami masalah.

sumber

Tutorial tentang bagaimana cara mengambil data / grabbing dari situs Rating: 4.5 Diposkan Oleh: admin

17 komentar:

  1. keren broo keren..
    saya mo nanya bisa nga kita data grab situs lazada misalnya ??
    jadi yg saya mo grab itu gambar barang , nama barang dan harga barang
    kalo abang bisa bantu boleh email saya
    pembunuhsetan@gmail.com

    ReplyDelete
  2. Replies
    1. kenapa? itu sudah jelas menurutku..he

      Delete
  3. gan, saya mau nanya nih, misalnya kita sudah berhasil grabbing beberapa situs berita, nah untuk buat semuanya jadi timeline terus di sortir berdasarkan waktu gimana ya gan?

    ReplyDelete
    Replies
    1. tinggal sort date aja gan,, maaf telat jarang buka blog ini, he

      Delete
  4. gan, minta kontak yang bisa dihubungi dong, saya newbie dan ingin belajar gan. tolong gan . terimakasih

    ReplyDelete
  5. om mau tanya nih, kalo itu berarti beritanya up to date ga? terus kalo semisal diklik berarti masuk ke kompas gitu ya?

    ReplyDelete
    Replies
    1. berita update jg gan,, kalo di klik brti ke web kita oh

      Delete
  6. Replies
    1. tergantung selera aja sih om mau pake apa, yang penting work,, :)

      Delete
  7. maaf masih baru , systax di atas bisa kita save dengan format apa ya ? , apa kah ada yg sengaja di salahkan ?

    ReplyDelete
  8. Gan teknik grabbing ini kira kira bisa gk dipake buat informasi beasiswa ? Misalnya sy ambil data beasiswa kaya persyaratan, fasilitas dll dari website resmi penyedia beasiswa nya

    ReplyDelete
    Replies
    1. tinggan mainkan aja codingnya, :)

      Delete
  9. This comment has been removed by a blog administrator.

    ReplyDelete
  10. gan kalau yang mau kita grab itu table yang server side processing bisa ngga ya? soalnya saya sudah coba tp hanya dapat table header nya saja

    ReplyDelete