Sudah lebih dari 2 tahun tidak mengisi blog ini. Kali ini saya akan membagikan cara web scraping kualitas udara dari website Kementerian Lingkungan Hidup dan Kehutanan (http://iku.menlhk.go.id/aqms/) menggunakan PHP dengan langsung menunjuk div/class yang akan diambil datanya. Berikut kodenya.
<?php
//url target yang akan diambil datanya
$html = file_get_contents('http://iku.menlhk.go.id/aqms/');
/*
data yang akan diproses pada $html kurang lebih seperti ini:
<div class='col-md-6'>
<div class='data-tabular'>
<div class='prop'>BALIKPAPAN_BB</div>
<div class='kabkota'>Kota Balikpapan</div>
<div class='prop'>propinsi Kalimantan Timur</div>
<div class='emot'>
<img src='img/icon/1.png'>
</div>
<div class='desc'>
<div class='ispu'>ISPU</div>
<div class='nilai' style='background: #00cc00'>1</div>
<div class='param'>Parameter</div>
<div class='namaparam' style='background: #00cc00'>SO2</div>
<div class='tanggal'>Tanggal</div>
<div class='isitanggal' style='background: #00cc00'>2020-01-02 15:00:00</div>
<div class='stasiun'>Kriteria</div>
<div class='namastasiun' style='background: #00cc00'>BAIK</div>
</div>
</div>
</div>
*/
$dom = new DOMDocument;
@$dom->loadHTML( $html );
$xp = new DOMXPath( $dom );
//div atau class parentNode yang akan diambil datanya
$query = '//div[@class="desc"]';
$col=$xp->query( $query );
if( $col && $col->length > 0 ){
$arr=array();
foreach( $col as $node ){
//div atau class childNode yang akan diambil datanya $query=sprintf('div[@class="%s"]|div[@class="%s"]|div[@class="%s"]|div[@class="%s"]','nilai','namaparam','isitanggal','namastasiun');
$nodes=$xp->query( $query, $node );
if( $nodes->length > 0 ){
foreach( $nodes as $item )$arr[]=$item->nodeValue;
}
}
if( !empty( $arr ) ){
$chunks=array_chunk( $arr, 4 );
}
}
echo '
<table>
<tr>
<th>Kab/Kota</th>
<th>ISPU</th>
<th>Parameter</th>
<th>Tanggal</th>
<th>Kriteria</th>
</tr>';
foreach( $chunks as $chunk ){
echo "
<tr>
<td></td>
<td>{$chunk[0]}</td>
<td>{$chunk[1]}</td>
<td>{$chunk[2]}</td>
<td>{$chunk[3]}</td>
</tr>";
}
echo '
</table>';
?>
hasilnya sebagai berikut:
Selamat mencoba dan selamat berkarya.
<?php
//url target yang akan diambil datanya
$html = file_get_contents('http://iku.menlhk.go.id/aqms/');
/*
data yang akan diproses pada $html kurang lebih seperti ini:
<div class='col-md-6'>
<div class='data-tabular'>
<div class='prop'>BALIKPAPAN_BB</div>
<div class='kabkota'>Kota Balikpapan</div>
<div class='prop'>propinsi Kalimantan Timur</div>
<div class='emot'>
<img src='img/icon/1.png'>
</div>
<div class='desc'>
<div class='ispu'>ISPU</div>
<div class='nilai' style='background: #00cc00'>1</div>
<div class='param'>Parameter</div>
<div class='namaparam' style='background: #00cc00'>SO2</div>
<div class='tanggal'>Tanggal</div>
<div class='isitanggal' style='background: #00cc00'>2020-01-02 15:00:00</div>
<div class='stasiun'>Kriteria</div>
<div class='namastasiun' style='background: #00cc00'>BAIK</div>
</div>
</div>
</div>
*/
$dom = new DOMDocument;
@$dom->loadHTML( $html );
$xp = new DOMXPath( $dom );
//div atau class parentNode yang akan diambil datanya
$query = '//div[@class="desc"]';
$col=$xp->query( $query );
if( $col && $col->length > 0 ){
$arr=array();
foreach( $col as $node ){
//div atau class childNode yang akan diambil datanya $query=sprintf('div[@class="%s"]|div[@class="%s"]|div[@class="%s"]|div[@class="%s"]','nilai','namaparam','isitanggal','namastasiun');
$nodes=$xp->query( $query, $node );
if( $nodes->length > 0 ){
foreach( $nodes as $item )$arr[]=$item->nodeValue;
}
}
if( !empty( $arr ) ){
$chunks=array_chunk( $arr, 4 );
}
}
echo '
<table>
<tr>
<th>Kab/Kota</th>
<th>ISPU</th>
<th>Parameter</th>
<th>Tanggal</th>
<th>Kriteria</th>
</tr>';
foreach( $chunks as $chunk ){
echo "
<tr>
<td></td>
<td>{$chunk[0]}</td>
<td>{$chunk[1]}</td>
<td>{$chunk[2]}</td>
<td>{$chunk[3]}</td>
</tr>";
}
echo '
</table>';
?>
hasilnya sebagai berikut:
Selamat mencoba dan selamat berkarya.