Kamis, 09 Januari 2020

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.

0 comments:

Posting Komentar

Subscribe to RSS Feed Follow me on Twitter!