2011-01-30 15 views
7

Sto cercando alcuni script di web crawler PHP robusti e ben documentati. Forse una porta PHP del progetto Java - http://wiki.apache.org/nutch/NutchTutorialQuali librerie di web crawler PHP sono disponibili?

Sto cercando sia versioni gratuite che non.

+1

Nessun crawler sta per eseguire lo scraping dei dati, è qualcosa che dovrai scrivere tu stesso. E assicurati anche che ciò che stai sollevando non sia protetto da copyright. –

+0

Possibile duplicato di [Metodi migliori per analizzare HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

+0

Ulteriori possibili duplicati in http://stackoverflow.com/search? q = web + crawler + php – Gordon

risposta

4

Basta provare Snoopy.

Estratto: "Snoopy è una classe PHP che simula un browser Web. Ad esempio, automatizza l'operazione di recupero del contenuto delle pagine Web e dei moduli di pubblicazione".

+2

Scusa amico, so che è un vecchio post ma la gente legge ancora questa risposta e ho downvoted perché Snoopy usa Regex per analizzare HTML e [non è bello] (http://stackoverflow.com/questions/6751105/why-its-not-possible-to-use-regex-to-parse-html-xml-a-formal-explanation-in- la)... – fernandosavio

2

È possibile utilizzare PHP Simple HTML DOM Parser. È davvero semplice e utile.

+1

Alternative di terze parti suggerite a [SimpleHtmlDom] (http://simplehtmldom.sourceforge.net/) che effettivamente usano [DOM] (http://php.net/manual/en/book.dom.php) invece di Analisi della stringa: [phpQuery] (http://code.google.com/p/phpquery/), [Zend_Dom] (http://framework.zend.com/manual/en/zend.dom.html) , [QueryPath] (http://querypath.org/) e [FluentDom] (http://www.fluentdom.org). – Gordon

2

Ho utilizzato DOM HTML semplice per circa 3 anni prima di scoprire phpQuery. È molto più veloce, non funziona in modo ricorsivo (puoi effettivamente scaricarlo) e ha un supporto completo per i selettori e i metodi jQuery.

+1

@Gordon No, sono selettori jQuery. Da jQuery.com: "Prendendo in prestito i CSS 1-3 e aggiungendone il proprio, jQuery offre un potente set di strumenti per la corrispondenza di un insieme di elementi in un documento." – Kemo

+0

Hmm, ok.Si estendono su selettori CSS. Immagino che sia una distinzione valida allora. Scusate. Raramente vedo persone che usano qualcosa che non è nel set di selettori CSS quando parlano di selettori * jQuery *. Fanno sembrare che jQuery li abbia inventati. – Gordon

+1

@Gordon si, io h8 anche la parte "come li abbiamo inventati" :) Ulteriori informazioni su sizzlejs.com – Kemo

1

c'è un tutorial greate here che unisce guzzlehttp e symfony/dom-crawler

Nel caso in cui il collegamento è perso qui è il codice è possibile utilizzare.

use Guzzle\Http\Client; 
use Symfony\Component\DomCrawler\Crawler; 
use RuntimeException; 

// create http client instance 
$client = new GuzzleHttp\ClientClient('http://download.cloud.com/releases'); 

// create a request 
$response = $client->request('/3.0.6/api_3.0.6/TOC_Domain_Admin.html'); 

// get status code 
$status = $response->getStatusCode(); 

// this is the response body from the requested page (usually html) 
//$result = $response->getBody(); 

// crate crawler instance from body HTML code 
$crawler = new Crawler($response->getBody(true)); 

// apply css selector filter 
$filter = $crawler->filter('div.apismallbullet_box'); 
$result = array(); 

if (iterator_count($filter) > 1) { 

    // iterate over filter results 
    foreach ($filter as $i => $content) { 

     // create crawler instance for result 
     $cralwer = new Crawler($content); 
     // extract the values needed 
     $result[$i] = array(
      'topic' => $crawler->filter('h5')->text(); 
      'className' => trim(str_replace(' ', '', $result[$i]['topic'])) . 'Client' 
     ); 
    } 
} else { 
    throw new RuntimeException('Got empty result processing the dataset!'); 
} 
Problemi correlati