Funzione php per il Web Scraping

Cos’è il web scraping?

Il web scraping è una tecnica utilizzata per prelevare (o sniffare) parte di una pagina web e manipolarla a proprio piacere. Esistono varie tecniche e linguaggi di programmazione che permettono questa operazione, ed un semplice ed efficace script in php è riportato di seguito.

La prima cosa da fare è “leggere” la pagina del sito dal quale vogliamo prelevarne parte del contenuto. Per fare questo utilizziamo la funzione php file_gets_contents:

$paginaletta= file_get_contents('http://www.paginadaleggere.com/papaveri.html');

a questo punto la variabile $paginaletta conterrà tutto il codice html della pagina papaveri.html del sito www.paginadaleggere.com.

Come fare ad estrarre la parte interessata? Semplice! Se consideriamo la variabile $paginaletta come una lunga stringa, possiamo muoverci al suo interno ed estrarne delle parti utilizzando le funzioni php strpos e substr . Per fare questo ho creato una funzione a doc chiamandola scrape:

function scrape($testo,$txt_inizio,$txt_fine,$offset){
$inizio = strpos($testo,$txt_inizio);
$fine = strpos($testo,$txt_fine,$inizio);
$darestituire = substr($testo,$inizio,$fine-$inizio+$offset);
return $darestituire;
}

Questa funzione richiede il passaggio di alcuni valori e cioè $testo, $txt_inizio, $txt_fine e $offset.

In questo caso nella variabile $testo passeremo il contenuto della variabile $paginaletta e quindi tutto il codice html della pagina papaveri.html del sito www.paginadaleggere.com.

Con la variabile $txt_inizio definiremo da che punto del codice della pagina papaveri.html iniziare a prelevare il contenuto, mentre con la variabile $txt_fine impostiamo fino a che punto estrarre il codice. La variabile $offset di tipo int (numero intero) serve ad eliminare dal risultato ottenuto il valore di $txt_fine.

Esempio:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Pagina papaveri</title>
</head>
<body>
<span class="red">i papaveri son alti alti alti</span>
</body>
</html>

Se questa fosse la nostra pagina papaveri.html ed il nostro scopo fosse quello di ottenere il contenuto dello span con classe red, il nostro codice sarebbe il seguente: $ottienispan= scrape($paginaletta,'','',0);

In questo caso la variabile $ottienispan sarà:

<span class="red">i papaveri son alti alti alti</span>

Naturalmente non ci troveremo mai nelle condizioni di cui sopra, con una pagina contenente solo ciò che ci interessa e con caratteri di delimitazione cosi ben definiti (<span class=”red”> e </span>).

Quando deciderai di prelevare del contenuto da una pagina, per prima cosa visualizza il suo codice html, scegli dei limiti ben definiti e che molto probabilmente non cambieranno nel tempo, se necessario esegui più volte la funzione scrape, quindi estrai del contenuto, poi dallo stesso fai una nuova estrazione, scremando di volta in volta il contenuto fino ad ottenere il risultato desiderato.

Esempio:

$primopassaggio = scrape($miotesto, '<div id="testata">', '</div>',0);

$secondopassaggio = scrape($$primopassaggio, '<span class="titolo">','</span>',0);

...

Ottenuta la parte di testo desiderata, possiamo personalizzarla con delle inclusioni di testo o delle sostituzioni utilizzando la funzione str_replace di php.

Ricerche che hanno riportato a questa pagina:
%d blogger hanno fatto clic su Mi Piace per questo: