Baccega Andrea Blog


The future is web3.0

Usare Curl e Php per prendere il contenuto di una pagina web

author Posted by: veke87 on date nov 20th, 2008 | filed Filed under: Programmazione

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:
  1. <?php
  2. $someUA = array (
  3. "Mozilla/5.0 (Windows; U; Windows NT 6.0; fr; rv:1.9.1b1) Gecko/20081007 Firefox/3.1b1",
  4. "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.0",
  5. "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",
  6. "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",
  7. "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)",
  8. "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322; .NET CLR 2.0.40607)",
  9. "Mozilla/4.0 (compatible; MSIE 7.0b; Windows NT 5.1; .NET CLR 1.1.4322)",
  10. "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)",
  11. "Mozilla/45.0 (compatible; MSIE 6.0; Windows NT 5.1)",
  12. "Mozilla/4.08 (compatible; MSIE 6.0; Windows NT 5.1)",
  13. "Mozilla/4.01 (compatible; MSIE 6.0; Windows NT 5.1)");
  14. function getRandomUserAgent ( ) {
  15.     srand((double)microtime()*1000000);
  16.     global $someUA;
  17.     return $someUA[rand(0,count($someUA)-1)];
  18. }
  19. function getContent ($url) {
  20.  
  21.     // Crea la risorsa CURL
  22.     $ch = curl_init();
  23.  
  24.     // Imposta l'URL e altre opzioni
  25.     curl_setopt($ch, CURLOPT_URL, $url);
  26.     curl_setopt($ch, CURLOPT_HEADER, 0);
  27.     curl_setopt($ch, CURLOPT_USERAGENT, getRandomUserAgent());
  28.     curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
  29.     // Scarica l'URL e lo passa al browser
  30.     $output = curl_exec($ch);
  31.     $info = curl_getinfo(CURLINFO_HTTP_CODE);
  32.     // Chiude la risorsa curl
  33.     curl_close($ch);
  34.     if ($output === false || $info != 200) {
  35.       $output = null
  36.     }
  37.     return $output;
  38.  
  39. }
  40. ?>

Per utilizzare questa semplice funzione basterà chiamare la funzione getContent con argomento l'url completo della pagina da ricevere.

Saluti, Andrea

Share and Enjoy:
  • del.icio.us
  • Technorati
  • Digg
  • Google Bookmarks
  • Facebook
  • Mixx

tagOne Response to “Usare Curl e Php per prendere il contenuto di una pagina web”

  1. John Brown Said,

    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);

     Add A Comment

trackback Trackback URI | rsscomment Comments RSS

wordpress seo