2011-01-30 16 views
7

Estoy buscando algunos scripts de rastreadores web robustos y bien documentados de PHP. Tal vez un puerto PHP del proyecto Java - http://wiki.apache.org/nutch/NutchTutorial¿Qué bibliotecas de crawlers web PHP están disponibles?

Estoy buscando versiones gratuitas y no gratuitas.

+1

Ningún rastreador va a hacer el raspado de datos, eso es algo que tendrá que escribir usted mismo. Y también asegúrese de que lo que está levantando no tenga derechos de autor. –

+0

Posible duplicado de [Mejores métodos para analizar HTML] (http://stackoverflow.com/questions/3577641/best-methods-to-parse-html/3577662#3577662) – Gordon

+0

Duplicados adicionales posibles en http://stackoverflow.com/search? q = web + crawler + php – Gordon

Respuesta

4

Solo dale una oportunidad a Snoopy.

Extracto: "Snoopy es una clase PHP que simula un navegador web. Automatiza la tarea de recuperar el contenido de la página web y publicar formularios, por ejemplo".

+2

Lo siento, sé que es una publicación anterior, pero la gente sigue leyendo esta respuesta y he votado negativamente porque Snoopy usa Regex para analizar HTML y [no es genial] (http://stackoverflow.com/questions/6751105/why-its-not-possible-to-use-regex-to-parse-html-xml-a-formal-explanation-in- la)... – fernandosavio

2

Puede usar PHP Simple HTML DOM Parser. Es realmente simple y útil.

+1

Alternativas sugeridas de terceros a [SimpleHtmlDom] (http://simplehtmldom.sourceforge.net/) que realmente usan [DOM] (http://php.net/manual/en/book.dom.php) en lugar de String Parsing: [phpQuery] (http://code.google.com/p/phpquery/), [Zend_Dom] (http://framework.zend.com/manual/en/zend.dom.html) , [QueryPath] (http://querypath.org/) y [FluentDom] (http://www.fluentdom.org). – Gordon

2

He estado usando Simple HTML DOM durante aproximadamente 3 años antes de descubrir phpQuery. Es mucho más rápido, no funciona de manera recursiva (en realidad puedes volcarlo) y tiene un soporte completo para los selectores y métodos jQuery.

+1

@Gordon No, son selectores jQuery. Desde jQuery.com: "Tomando prestado de CSS 1-3, y luego agregando el suyo propio, jQuery ofrece un poderoso conjunto de herramientas para unir un conjunto de elementos en un documento". – Kemo

+0

Hmm, está bien.Se extienden en selectores de CSS. Supongo que esa es una distinción válida entonces. Lo siento. Casi nunca veo que la gente use nada que no esté en el conjunto de selectores de CSS cuando hablan de los selectores * jQuery *. Lo hacen sonar como jQuery los inventó. – Gordon

+1

@Gordon sí, yo h8 la parte "como nosotros los inventamos" :) Más información en sizzlejs.com – Kemo

1

No es un tutorial greate here que combina guzzlehttp y symfony/dom-crawler

En caso de que el enlace se pierde aquí es el código que puede hacer uso.

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!'); 
} 
Cuestiones relacionadas