PHP

XPath di PHP untuk mendapatkan data di halaman web

Tantangan hari ini adalah XPath, Jadi pada suatu hari ada sebuah kasus dimana PHP script harus menangkap informasi di berbagai halaman web.

Yang menjadi masalah adalah halaman web bisa diformat dalam struktur yang bermacam-macam, kita membutuhkan cara membaca yang mudah, portable dan bisa disesuaikan.

XPath

XPath adalah syntax untuk mendeskripsikan lokasi dari elemen XML (makanya disebut PATH), jadi dengan mengetahui XPath tertentu kamu bisa melompat ke bagian tertentu dari dokumen XML dan mendapatkan nilainya.

Misal ada XML dokumen berbentu seperti ini:


        Nilai

Dengan XPath sederhana seperti

//node/elemen/anak

kita bisa mendapatkan isinya node dengan hanya mengetahui XPathnya (jadi tidak perlu iterasi per-node), konsepnya sih mirip dengan Pathnya folder structure.

Misalnya

/html/body

Akan mengembalikan seluruh node didalam “body”

Mirip juga dengan JQuery loh, misalnya

//div[@id="one"]

Akan mengembalikan node div dimanapun yang memiliki id “one”

/html/body/div[5]

Akan mengembalikan div ke-5 yang merupakan anak dari body

Untuk info lebih lanjut mengenai XPath bisa lihat disini
W3School Xpath

XPath in PHP

Di PHP kita bisa menggunakan DOMDocument atau simpleXML untuk melakukan query XPath.

Misalnya ada source HTML seperti ini

<html>
<head><title>Hai</title></head>
<body>
<h1>Produk Keren</h1>
<div id="warna">Merah</div>
<div id="price">Rp 3000</div>
<div id="deskripsi">Produk super keren!</div>
</body>

Kodenya sendiri mudah saja… misalnya teks diatas kita masukan ke variabel $content

// inisialisasi DOMnya, siapin objek bertipe DOMXPath
$html = new DOMDocument();
$html->loadHtml($content);
$xpath = new DOMXPath( $html );

// 1. mendapatkan judul dari halaman
$nodes = $xpath ->query('/html/head/title');
echo $nodes->item(0)->nodeValue;

//2. mendapatkan nama produk
$nodes = $xpath ->query('/html/body/h1');
echo $nodes->item(0)->nodeValue;

//3. mendapatkan harga
$nodes = $xpath ->query('//div[@id="price"]');
echo $nodes->item(0)->nodeValue;

//3. mendapatkan harga (incase HTMLnya tidak memiliki atribut
//    jadi kita menggunakan posisi sebagai acuan)
$nodes = $xpath ->query('/html/body/div[2]');
echo $nodes->item(0)->nodeValue;

Perlu diingat kalau metoda “query” akan selalu mengembalikan list of nodes (jika gagal dia akan mengembalikan list of nodes dengan length = 0)

Conclusion

Yang membuat XPath ini spesial adalah, kamu bisa menyimpannya sebagai string, misalnya program kamu mesti membaca bagian tertentu dari sebuah Site, tapi tiba2 site itu merubah desain layoutnya. Kamu tinggal mengubah lokasi XPath kamu (in which configurable bukan?)

Happy XPath-ing…

Advertisements

6 thoughts on “XPath di PHP untuk mendapatkan data di halaman web

      1. Sy udah nyobain simple htmlDOM, looping nya ada sampe 5000 data, tiap hari memory di server nya bertambah terus meskipun sudah di unset($html) atau $html->clear, tar saya cobain casperjs. Hehe

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s