texto tag strip_tags remove quitar para limpiar img funcion from etiquetas ejemplo php screen-scraping

tag - ¿Cómo implementar un raspador web en PHP?



strip_tags wordpress (15)

De hecho, estoy buscando arañar BibleGateway.com ya que no proporcionan una API para acceder a los versos de una aplicación web que estoy buscando crear.

Parece que puede estar tratando de ''conectar en caliente'' en lugar de raspar, es decir, actualizar en tiempo real en función del contenido de su sitio.

Este tutorial es bastante bueno:

http://www.merchantos.com/makebeta/php/scraping-links-with-php/

Es posible que también desee ver a Prowser.

¿Qué funciones incorporadas de PHP son útiles para el web scraping? ¿Cuáles son algunos buenos recursos (web o impresos) para ponerse al día con el raspado web con PHP?


Aquí hay un tutorial correcto (se eliminó el enlace, ver a continuación) sobre raspado web usando cURL y file_get_contents . Asegúrate de leer las siguientes partes también.

(hipervínculo directo eliminado debido a advertencias de malware)

http://www.oooff.com/php-scripts/basic-php-scraped-data-parsing/basic-php-data-parsing.php



Clase raspador de mi marco:

<?php /* Example: $site = $this->load->cls(''scraper'', ''http://www.anysite.com''); $excss = $site->getExternalCSS(); $incss = $site->getInternalCSS(); $ids = $site->getIds(); $classes = $site->getClasses(); $spans = $site->getSpans(); print ''<pre>''; print_r($excss); print_r($incss); print_r($ids); print_r($classes); print_r($spans); */ class scraper { private $url = ''''; public function __construct($url) { $this->url = file_get_contents("$url"); } public function getInternalCSS() { $tmp = preg_match_all(''/(style=")(.*?)(")/is'', $this->url, $patterns); $result = array(); array_push($result, $patterns[2]); array_push($result, count($patterns[2])); return $result; } public function getExternalCSS() { $tmp = preg_match_all(''/(href=")(/w.*/.css)"/i'', $this->url, $patterns); $result = array(); array_push($result, $patterns[2]); array_push($result, count($patterns[2])); return $result; } public function getIds() { $tmp = preg_match_all(''/(id="(/w*)")/is'', $this->url, $patterns); $result = array(); array_push($result, $patterns[2]); array_push($result, count($patterns[2])); return $result; } public function getClasses() { $tmp = preg_match_all(''/(class="(/w*)")/is'', $this->url, $patterns); $result = array(); array_push($result, $patterns[2]); array_push($result, count($patterns[2])); return $result; } public function getSpans(){ $tmp = preg_match_all(''/(<span>)(.*)(<//span>)/'', $this->url, $patterns); $result = array(); array_push($result, $patterns[2]); array_push($result, count($patterns[2])); return $result; } } ?>


El raspado generalmente abarca 3 pasos:

  • primero obtienes o envías tu solicitud a una URL específica
  • A continuación, recibe el html que se devuelve como respuesta
  • finalmente analizas ese html el texto que deseas raspar.

Para completar los pasos 1 y 2, a continuación se muestra una clase php simple que utiliza Curl para buscar páginas web mediante GET o POST. Después de recuperar el HTML, solo usa expresiones regulares para completar el paso 3 al analizar el texto que desea raspar.

Para las expresiones regulares, mi sitio de tutorial favorito es el siguiente: Tutorial de expresiones regulares

Mi programa favorito para trabajar con RegExs es Regex Buddy . Le aconsejo que pruebe la demostración de ese producto, incluso si no tiene intención de comprarlo. Es una herramienta invaluable e incluso generará código para sus expresiones regulares en el idioma que elija (incluido php).

Uso:

$curl = new Curl(); $html = $curl->get("http://www.google.com");

// now, do your regex work against $html

Clase PHP:

<?php class Curl { public $cookieJar = ""; public function __construct($cookieJarFile = ''cookies.txt'') { $this->cookieJar = $cookieJarFile; } function setup() { $header = array(); $header[0] = "Accept: text/xml,application/xml,application/xhtml+xml,"; $header[0] .= "text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"; $header[] = "Cache-Control: max-age=0"; $header[] = "Connection: keep-alive"; $header[] = "Keep-Alive: 300"; $header[] = "Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7"; $header[] = "Accept-Language: en-us,en;q=0.5"; $header[] = "Pragma: "; // browsers keep this blank. curl_setopt($this->curl, CURLOPT_USERAGENT, ''Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US; rv:1.8.1.7) Gecko/20070914 Firefox/2.0.0.7''); curl_setopt($this->curl, CURLOPT_HTTPHEADER, $header); curl_setopt($this->curl,CURLOPT_COOKIEJAR, $this->cookieJar); curl_setopt($this->curl,CURLOPT_COOKIEFILE, $this->cookieJar); curl_setopt($this->curl,CURLOPT_AUTOREFERER, true); curl_setopt($this->curl,CURLOPT_FOLLOWLOCATION, true); curl_setopt($this->curl,CURLOPT_RETURNTRANSFER, true); } function get($url) { $this->curl = curl_init($url); $this->setup(); return $this->request(); } function getAll($reg,$str) { preg_match_all($reg,$str,$matches); return $matches[1]; } function postForm($url, $fields, $referer='''') { $this->curl = curl_init($url); $this->setup(); curl_setopt($this->curl, CURLOPT_URL, $url); curl_setopt($this->curl, CURLOPT_POST, 1); curl_setopt($this->curl, CURLOPT_REFERER, $referer); curl_setopt($this->curl, CURLOPT_POSTFIELDS, $fields); return $this->request(); } function getInfo($info) { $info = ($info == ''lasturl'') ? curl_getinfo($this->curl, CURLINFO_EFFECTIVE_URL) : curl_getinfo($this->curl, $info); return $info; } function request() { return curl_exec($this->curl); } } ?>


El raspado puede ser bastante complejo, dependiendo de lo que quieras hacer. Lea esta serie de tutoriales sobre Lo básico de escribir un raspador en PHP y vea si puede entenderlo.

Puede utilizar métodos similares para automatizar registros de formularios, inicios de sesión, ¡incluso clics falsos en anuncios! Sin embargo, las principales limitaciones del uso de CURL son que no admite el uso de javascript, por lo que si está intentando eliminar un sitio que utiliza AJAX para la paginación, por ejemplo, puede ser un poco complicado ... ¡pero hay formas de evitarlo!



La biblioteca Curl le permite descargar páginas web. Deberías buscar expresiones regulares para hacer el raspado.



Recomiendo Goutte, un simple raspador web de PHP .

Ejemplo de uso: -

Cree una instancia de Goutte Client (que amplíe Symfony/Component/BrowserKit/Client ):

use Goutte/Client; $client = new Client();

Realice solicitudes con el método request() :

$crawler = $client->request(''GET'', ''http://www.symfony-project.org/'');

El método de request devuelve un objeto Crawler ( Symfony/Component/DomCrawler/Crawler ).

Haga clic en enlaces:

$link = $crawler->selectLink(''Plugins'')->link(); $crawler = $client->click($link);

Presentar formularios:

$form = $crawler->selectButton(''sign in'')->form(); $crawler = $client->submit($form, array(''signin[username]'' => ''fabien'', ''signin[password]'' => ''xxxxxx''));

Extraer datos:

$nodes = $crawler->filter(''.error_list''); if ($nodes->count()) { die(sprintf("Authentification error: %s/n", $nodes->text())); } printf("Nb tasks: %d/n", $crawler->filter(''#nb_tasks'')->text());


Si necesita algo que sea fácil de mantener, en lugar de rápido de ejecutar, podría ser útil usar un navegador programable, como SimpleTest''s .


Yo usaría libcurl o Perl''s LWP (libwww para perl). ¿Hay un libwww para php?



ScraperWiki es un proyecto bastante interesante. Te ayuda a construir raspadores en línea en Python, Ruby o PHP. Pude hacer una simple tentativa en pocos minutos.


file_get_contents() puede tomar una URL remota y darle la fuente. Luego puede usar expresiones regulares (con las funciones compatibles con Perl) para obtener lo que necesita.

Por curiosidad, ¿qué estás tratando de raspar?