PHP Simple HTML DOM Parser é uma biblioteca para extrair conteúdo específico de um site e publicá-lo em outro site. Web scraping é o processo de extração de dados ou conteúdo de um site. Os dados ou conteúdos extraídos podem ser publicados em outros sites ou salvos em um banco de dados. Ao contrário do screen scraping, que captura o conteúdo como uma imagem, o web scraping extrai o código HTML subjacente para recuperar os dados ou o conteúdo do site.
Passo 1: Descarregue a bibiloteca PHP Simple HTML DOM Parser no seguinte endereço.
https://simplehtmldom.sourceforge.io/
https://simplehtmldom.sourceforge.io/manual.htm
Passo 2:
Neste exemplo os dados serão valores de metais preciosos (Platina, Paládio e Ródio) retirados do site: https://www.kitco.com/market/
No seu navegador prima F11, ou botão direito do rato e inspecionar.
Identifique os campos dos quais quer recolher os valores. Neste caso, Platina tem o id PT-bid.
Passo 3: Crie um ficheiro PHP para descarregar os dados e insira a biblioteca PHP Simple HTML DOM Parser.
<?php
include_once('simple_html_dom.php');
Insira o caminho para a página de onde deseja retirar os dados.
$html = file_get_html('https://www.kitco.com/market/');
$date_start = date('Y-m-d H:i:s', time()); // grava a data
Passo 4: Identificar elementos, extrair valores, converter de onças para gramas. 1 onça = 28.3495231 gramas
$PT = $html->getElementById("PT-bid"); // identifica o elemento Platina.
$PT =$PT->plaintext; // Extrai o valor do campo.
$pt_g = ($PT/28.3495231); // Converte o valor de onças para gramas.
$PD = $html->getElementById("PD-bid"); // identifica o elemento Paládio.
$PD = $PD->plaintext; // Extrai o valor do campo.
$pd_g = ($PD/28.3495231); // Converte o valor de onças para gramas.
$RH = $html->getElementById("RH-bid"); // identifica o elemento Ródio
$RH = $RH->plaintext; // Extrai o valor do campo.
$rh_g = ($RH/28.3495231); // Converte o valor de onças para gramas.
Passo 5: Converter os valores de Dollar para Euro:
Na mesma página, identifique a cotação.
foreach($html->find('div.item_container.exchange_rates table tr td.index') as $e){
$arr[] = trim($e->innertext);
}
$dollar = $arr[2];
$PT_Euro = (number_format($pt_g,"2")*$dollar);
$PD_Euro = (number_format($pd_g,"2")*$dollar);
$RH_Euro = (number_format($rh_g,"2")*$dollar);
Passo 6: Apresentar os dados
<div class="container">
<?php echo $date_start ." <b>Cotação Euro/Dollar</b>: ". $dollar ."<hr>"; ?> <div class="row"> <div class="col-sm-4"> <div class="card"> <div class="card-body"> <h5 class="card-title">PLATINUM</h5> <p class="card-text"> Oz/Dollar: <?php echo number_format($PT,"2");?><br/> Gr/Dollar: <?php echo number_format($pt_g,"2");?><br/> Gr/Euro: <?php echo number_format($PT_Euro,"2");?><br/> </div> </div> </div> <div class="col-sm-4"> <div class="card"> <div class="card-body"> <h5 class="card-title">PALLADIUM</h5> <p class="card-text"> Oz/Dollar: <?php echo number_format($PD,"2");?><br/> Gr/Dollar: <?php echo number_format($pd_g,"2");?><br/> Gr/Euro: <?php echo number_format($PD_Euro,"2");?><br/> </div> </div> </div> <div class="col-sm-4"> <div class="card"> <div class="card-body"> <h5 class="card-title">RHODIUM</h5> <p class="card-text"> Oz/Dollar: <?php echo number_format($RH,"2");?><br/> Gr/Dollar: <?php echo number_format($rh_g,"2");?><br/> Gr/Euro: <?php echo number_format($RH_Euro,"2");?><br/> </p> </div> </div> </div> </div> </div>
Passo 7: Caso deseje gravar os dados numa base de dados, pode fazê-lo da seguinte forma:
<?php $sql = "INSERT INTO NOME-DA-TABELA (platinum, palladium, rhodium, date_start) VALUES ($PT_Euro, $PD_Euro, $RH_Euro, '$date_start')"; if(mysqli_query($conn, $sql)){ echo '<div class="container">Os valores foram Gravados na base de dados.</div>'; } else{ echo '<div class="container">ERROR: Could not able to execute $sql. ' . mysqli_error($conn) . '</div>'; } ?>