6 Library PHP untuk Web Scraping

Muhammad Arslan 17 September 2017

6 Library PHP untuk Web Scraping

PHP sudah menjadi bahasa umum yang digunakan untuk web scraping. Biasanya seorang programmer mengambil informasi tertentu dari suatu halaman website yang tidak menyediakan API untuk diakses oleh sistemnya. Dengan menggunakan teknik scraping, seorang programmer dapat mengambil informasi tertentu seperti informasi cuaca dari website BMKG dan menyimpannya di database mereka.

Di PHP kamu dapat melakukan scraping dengan beberapa library ini:

###1. Standard Library

PHP memiliki sejumlah library untuk memparsing HTML. Seperti DOM atau libxml. Untuk melakukan HTTP request dapat juga kita gunakan cUrl agar dapat mensimulasi proses tersebut.

// set post fields
$post = [
    'username' => 'user1',
    'password' => 'passuser1',
    'gender'   => 1,
];

$ch = curl_init('http://www.domain.com');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post);

// execute!
$response = curl_exec($ch);

// close the connection, release resources used
curl_close($ch);

// do anything you want with your response
var_dump($response);

###2. Guzzle

Guzzle adalah library PHP untuk melakukan HTTP request dengan sangat mudah dan dapat diintegrasikan dengan berbagai macam web service. Guzzle memiliki kelebihan untuk melakukan HTTP request secara asinkron ataupun sinkron. Selain itu dia juga mendukung standar PSR-7 dalam penulisan library-nya.

Contoh kodenya adalah sebagai berikut:

$client = new GuzzleHttp\Client();
$res = $client->request('GET', 'https://api.github.com/user', [
    'auth' => ['user', 'pass']
]);
echo $res->getStatusCode();
// "200"
echo $res->getHeader('content-type');
// 'application/json; charset=utf8'
echo $res->getBody();
// {"type":"User"...'

// Send an asynchronous request.
$request = new \GuzzleHttp\Psr7\Request('GET', 'http://httpbin.org');
$promise = $client->sendAsync($request)->then(function ($response) {
    echo 'I completed! ' . $response->getBody();
});
$promise->wait();

Untuk info lebih lanjut silahkan kunjungi dokumentasinya: docs.guzzlephp.org/en/latest/

###3. Buzz

Buzz adalah library PHP untuk menangani HTTP request yang paling ringan. Selain itu Buzz merupakan library yang dibuat sesederhana mungkin namun mampu menyerupai karakter sebuah web browser.

Berikut adalah contoh kodenya:

<?php

$browser = new Buzz\Browser();
$response = $browser->get('http://www.google.com');

echo $browser->getLastRequest()."\n";
// $response is an object. 
// You can use $response->getContent() or $response->getHeaders() to get only one part of the response.
echo $response; 

Kunjungi dokumentasinya disini: https://github.com/kriswallsmith/Buzz

###4. HttpFul

HTTPFul adalah library PHP yang sederhana, mudah dibaca, dan dapat digunakan dengan mudah untuk berbicara kepada HTTP. Mendukung berbagai HTTP Method, custom header, automatic parsing, automatic payload serialization, basic auth, client side certificate auth, dan memiliki kemampuan untuk membaca request template.

Contohnya adalah seperti berikut:

// Make a request to the GitHub API with a custom
// header of "X-Trvial-Header: Just as a demo".
$url = "https://api.github.com/users/nategood";
$response = \Httpful\Request::get($url)
    ->expectsJson()
    ->withXTrivialHeader('Just as a demo')
    ->send();
 
echo "{$response->body->name} joined GitHub on " .
                        date('M jS', strtotime($response->body->created_at)

Lengkapnya silahkan kunjungi dokumentasinya: http://phphttpclient.com/

###5. Requests

Requests adalah library PHP untuk HTTP request yang diperuntukkan manusia. Selain mudah digunakan, bentuk API-nya menyerupai web farmework Laravel. Selain itu banyak dukungan yang diberikan seperti browser-style ssl verification, automatic decompression, basic auth, mendukung semua HTTP method, dan lainnya.

Berikut adalah contoh kodenya:

$headers = array('Accept' => 'application/json');
$options = array('auth' => array('user', 'pass'));
$request = Requests::get('https://api.github.com/gists', $headers, $options);

var_dump($request->status_code);
// int(200)

var_dump($request->headers['content-type']);
// string(31) "application/json; charset=utf-8"

var_dump($request->body);
// string(26891) "[...]"

Informasi detailnya dapat dilihat disini: http://requests.ryanmccue.info/

###6. Goutte

Goutte adalah library PHP untuk proses screen scraping dan web crawling. Goutte menyediakan API yang keren untuk mengekstrak data dari respon HTML atau XML. Untuk menggunakannya kamu memerlukan PHP 5.4 dan Guzzle. Sedangkan untuk instalasinya dapat menggunakan Composer.

Contoh penggunaannya adalah sebagai berikut:

use Goutte\Client;
use GuzzleHttp\Client as GuzzleClient;

$goutteClient = new Client();
$guzzleClient = new GuzzleClient(array(
    'timeout' => 60,
));
$goutteClient->setClient($guzzleClient);

// Click on the "Security Advisories" link
$link = $crawler->selectLink('Security Advisories')->link();
$crawler = $client->click($link);

// Get the latest post in this category and display the titles
$crawler->filter('h2 > a')->each(function ($node) {
    print $node->text()."\n";
});

$crawler = $client->request('GET', 'https://github.com/');
$crawler = $client->click($crawler->selectLink('Sign in')->link());
$form = $crawler->selectButton('Sign in')->form();
$crawler = $client->submit($form, array('login' => 'fabpot', 'password' => 'xxxxxx'));
$crawler->filter('.flash-error')->each(function ($node) {
    print $node->text()."\n";
});

Silahkan kunjungi Goutte disini: https://github.com/FriendsOfPHP/Goutte