Pernahkah Anda menemukan situs yang isinya adalah kumpulan penggalan artikel dari situs-situs lain?
Pernahkah Anda punya bayangan untuk mencuri download link dari gudanglagu.com?
Pernahkah Anda punya rencana untuk mengumpulkan sebanyak mungkin alamat email?
Pernahkah Anda ingin membuat situs pencari artikel pdf?
ingin membuat auto content web? auto blog?
Mungkin sebelum harapan Anda terwujud ada baiknya kita belajar bareng gimana melakukan data mining / lebih fokus ke web fetching dengan PHP. Untuk memperdalam teknik-teknik data mining atau penggalian data bisa merujuk ke wikipedia tentang
penggalian data.
Untuk studi kasus mari kita curi data-data dari gudanglagu.com . Saya pernah melakukannya dan mendapatkan lebih kurang 7000 link download dalam waktu yang tidak terlalu lama. Yah, paling tidak sudah cukup untuk memulai sebuah situs download mp3 atau menjual script download mp3 plus databasenya.
Mari kita lakukan, tapi terlebih dahulu siapkan
webserver di komputer lokal Anda. Saya tidak menganjurkan melakukan di tempat hostingan asli, memang apabila dihost di sana penggalian data akan berpuluh-puluh kali lebih cepat. Tapi penggunaan resource yang besar akan sangat mungkin account Anda disuspend. Saya sudah mengalaminya 2 kali dan kapok. Optimasi script saya untuk webhosting beneran tidak pernah berhasil. Paling tidak untuk saat ini hehehe.
get website content atau mengambil isi web bisa kita lakukan dengan banyak cara.
Dengan PHP diantaranya adalah dengan:
Mungkin masih ada teknik lainnya, dan kita tidak akan membahas semuanya. Saya akan menampilkan satu contoh dengan
file_get_contents
-
- <?php
- $homepage = file_get_contents('http://gudanglagu.com/');
- echo $homepage;
- ?>
dengan script di atas kita bisa mendapatkan seluruh kode HTML dari http://gudanglagu.com bahkan tampilannya sama persis dengan halaman depan gudanglagu.com. Ya memang semua kodenya kita ambil dan kita tampilkan di localhost.
Pertanyaan selanjutnya adalah bagaimana mengambil sebagian isi dari gudanglagu.com. Misalkan kita akan mengambil headlinenya, jadi kita analisa dulu kode HTMLnya. Headline gudanglagu.com ternyata diawali dengan <!-- LATEST HEADLINES --> dan diakhiri dengan <!-- SECTIONS (CATEGORIES) --> dengan kata lain isi yang kita harapkan diapit dengan dua buah komen di atas.
Selanjutnya adalah mencari posisi dan posisi menggunakan
strpos
- <?php
- $homepage = file_get_contents('http://gudanglagu.com/');
-
- $string_awal = '<!-- LATEST HEADLINES -->';
- $string_akhir = '<!-- SECTIONS (CATEGORIES) -->';
-
- $pos_awal = strpos($homepage, $string_awal);
- $pos_akhir = strpos($homepage, $string_akhir);
-
- echo '<p>awal: ',$pos_awal,'</p>';
- echo '<p>akhir: ',$pos_akhir,'</p>';
- ?>
-
Dari situ kita tahu posisi awal dan akhirnya, tinggal kita extract pakai
substr
-
- <?php
- $homepage = file_get_contents('http://gudanglagu.com/');
-
- $string_awal = '<!-- LATEST HEADLINES -->';
- $string_akhir = '<!-- SECTIONS (CATEGORIES) -->';
-
- $pos_awal = strpos($homepage, $string_awal);
- $pos_akhir = strpos($homepage, $string_akhir);
-
- echo '<p>awal: ',$pos_awal,'</p>';
- echo '<p>akhir: ',$pos_akhir,'</p>';
-
- echo '<b>Hasilnya:</b>';
- echo substr($homepage, $pos_awal, $pos_akhir);
-
- ?>
-
Dan walla.... sudah bisa menampilkan data yang kita inginkan. walaupun tidak begitu sempurna.
Cara lain adalah dengan menggunakan
explode.
-
- <?php
- $homepage = file_get_contents('http://gudanglagu.com/');
-
- $string_awal = '<!-- LATEST HEADLINES -->';
- $string_akhir = '<!-- SECTIONS (CATEGORIES) -->';
-
- $homepage = explode($string_awal, $homepage);
- $homepage = explode($string_akhir, $homepage[1]);
-
- echo '<b>Hasilnya:</b>';
- echo $homepage[0];
-
- ?>
-
Dan dengan cara ini hasilnya lebih bagus, pertanyaannya berapa resource yang digunakan untuk script ini? Berapa lama waktu eksekusi script untuk satu halaman. Kalau satu halaman saja membutuhkan waktu sekian lama, berapa lama untuk mengambil keseluruhan data dari satu situs segede gudanglagu.com?
Baiklah, saya akan memberi alternatif lain dengan menggunakan HTML DOM. Dan saya tidak mau repot dengan urusan ini karena sudah ada "
PHP Simple HTML Dom parser" yang akan memudahkan segalanya. Tinggal kita unduh saja dan ambil satu file yaitu
simple_html_dom.php dan kita include saja.
Lets do it, kita akan mengambil semua link di halaman depan gudanglagu.com dengan script ini:
-
- <?php
- require 'simple_html_dom.php';
-
-
- $html = file_get_html('http://www.gudanglagu.com/');
-
-
- foreach($html->find('a') as $element)
- echo $element->href . '<br>';
-
- ?>
-
contoh lain, kalau ingin mengambil semua gambar bisa dengan ini:
-
- <?php
- require 'simple_html_dom.php';
-
-
- $html = file_get_html('http://www.gudanglagu.com/');
-
-
- foreach($html->find('img') as $element)
- echo $element->src . '<br>';
-
- ?>
-