Cara Mudah Scraping dengan Zend Http Client
- Maulana Saputra
- https://gitlab.com/maulana20/zf3-scrapping
Apa itu Scraping ? yaitu pengambilan sebuah dokumen berupa halaman web dengan tujuan untuk menganalisis dokumen untuk di ambil data tertentu.
Kita lanjut untuk mencoba scraping. Sekarang ambil ambil repo tersebut. Kemudian ambil library yang di butuhkan dengan composer.
composer install
Library yang di butuhkan.
"zendframework/zend-http": "^2.11"
Kemudian jalankan PHP web server.
php -S 0.0.0.0:4000 -t public public/index.php
Buka pada browser dan buat folder log. Pilih menu scrapper dan pilih jadwal penerbangan kemudian cari.
Gambar I.
Maka akan muncul jadwal penerbangan dengan jadwal yang kita inginkan. Kemudian lihat pada folder log, maka akan tampil screen page html. Page tersebut merupakan hasil dari scraping yang akan kita ambil datanya.
Lihat pada model Citilink.php, terdapat 2 class diantaranya :
- Scrapper
- Citilink
Scrapper
Model disini sebagai pembentuk client pada Zend_Http_Client. Model di buat abstract class untuk berperan sebagai kerangka dasar untuk turunan kelas lainnya.
abstract class Scrapper
{
protected $url;
protected $client;
protected function createClient()
{
$this->client = new Client($this->url);
$this->client->setOptions([ // set option ]);
$this->client->setHeaders([ "Connection" => "keep-alive" ]);
}
}
Citilink
Kelas turunan dari model Scrapper, disini model tersebut sebagai maskapai yang akan kita scraping. Perlu kita ketahui, client berkomunikasi melalui HTTP yang merupakan protokol yang berbicara menggunakan request dan response menjadikan aplikasi web bergantung kepada siklus ini untuk menghasilkan dokumen yang ingin diakses oleh pengguna.
Gambar II.
Gambar di atas merupakan halaman yang berjalan pada HTTP browser. Ambil request saat buka halaman awal hingga pencarian jadwal.
// pada method loginClient yaitu mengambil halaman awal
$client->setUri($host);
$client->setHeaders(["Connection" => "keep-alive"]);
$response = $client->send();
$result = $response->getBody();
$this->logResponse('log/CitilinkIndex.html', $result);
// pada method search yaitu mengambil halaman pencarian jadwal
$data = [];
$data['Page'] = 'Select'; // $data sesuai HTTP request
$client->setUri($host . '/Search.aspx');
$client->setMethod('GET');
$client->setParameterGet($data);
$response = $client->send();
$result = $response->getBody();
$this->logResponse('log/CitilinkSearch.html', $result);
Simpan screen page tersebut ke dalam log, kemudian ambil data yang di butuhkan pada result body dan olah data (saya menyebutnya mapping). Olah data tersebut akan di kirim ke front-end untuk di tampilkan hingga seperti pada Gambar I.
Sekian untuk kali ini semoga bermanfaat :D untuk lebih lanjut bisa kunjungi link tersebut.