Salve gente,
oggi voglio presentarvi una funzioncina che potrebbe tornarvi utile… Questa piccola guida è rivolta sopratutto ai programmatori php che si trovano spesso di fronte a problemi che per essere risolti utilizzano il web-scraping .
In Particolare, La mia funzione fa uso di php+curl per prendere il contenuto servito dalla pagina richiesta. L’uso della libreria curl permette di gestire molte più informazioni della semplice chiamata a fopen..
Inoltre curl, nei vari benchmark risulta essere ben 200 volte più veloce a serivire le richieste della normale chiamata a fopen(‘http….’);
Qui di seguito vi lascio il mio codice sorgente free.
Input: url della pagina da crawlare
Output: contenuto della pagina oppure null
Features: lo script ha un set limitato di user agent e li utilizza per simulare una vera chiamata a browser ( alcuni server potrebbero non servire affatto una risposta se il campo User-Agent non è settato )
<?php $someUA = array ( "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.1b1) Gecko/20081007 Firefox/3.1b1", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.0", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.19 (KHTML, like Gecko) Chrome/0.4.154.18 Safari/525.19", "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/525.13 (KHTML, like Gecko) Chrome/0.2.149.27 Safari/525.13", "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30)", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322)", "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.0.3705; Media Center PC 3.1; Alexa Toolbar; .NET CLR 1.1.4322; .NET CLR 2.0.50727)", "Mozilla/45.0 (compatible; MSIE 6.0; Windows NT 5.1)", "Mozilla/4.08 (compatible; MSIE 6.0; Windows NT 5.1)", "Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)"); function getRandomUserAgent ( ) { srand((double)microtime()*1000000); global $someUA; return $someUA[rand(0,count($someUA)-1)]; } function getContent ($url) { // Crea la risorsa CURL $ch = curl_init(); // Imposta l'URL e altre opzioni curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_USERAGENT, getRandomUserAgent()); curl_setopt($ch, CURLOPT_RETURNTRANSFER,true); // Scarica l'URL e lo passa al browser $output = curl_exec($ch); $info = curl_getinfo($ch, CURLINFO_HTTP_CODE); // Chiude la risorsa curl curl_close($ch); if ($output === false || $info != 200) { $output = null } return $output; } ?>
Per utilizzare questa semplice funzione basterà chiamare la funzione getContent con argomento l’url completo della pagina da ricevere.
Saluti, Andrea
maggio 27, 2009 at 11:00 pm
Att.ne!
La chiamata alla funzione curl_getinfo(CURLINFO_HTTP_CODE); prende in realtà due parametri: la chiamata giusta dovrebbe essere:
curl_getinfo($ch, CURLINFO_HTTP_CODE);
Simulare un User-Agent utilizzando CURL | Mr.Webmaster – Blog
luglio 26, 2010 at 1:15 am
[...] tipici dei più comuni browser (come IExploer o Firefox). Di seguito un interessante codice che ho trovato in rete sul blog di Andrea [...]
settembre 1, 2010 at 10:01 am
ciao, scusa l’ignoranza ma non riesco a far girare il codice che hai riportato, in particolare non trovo dove definisci la costante CURLINFO_HTTP_CODE, mi puoi aiutare? l’argomento mi interessa e volevo capire meglio come usare questa tecnica
settembre 1, 2010 at 10:14 am
liuk scrivi così
curl_getinfo($ch, CURLINFO_HTTP_CODE)