Scraping en PHP con cURL

En este artículo veremos como extraer contenido de una página web con PHP utilizando cURL.

cURL es parte de libcurl, una librería que permite conectarte a servidores mediante muchos tipos diferentes de protocolos. Soporta http, https y otros protocolos. Esta forma de obtener datos de la web es más estable que utilizando file_get_contents(). Si curl() no está instalado, te aconsejo buscar tutoriales para instalarlo. Aquí hay uno en Windows y otro en Linux.

Configurando cURL

Primero, iniciamos el manejador cURL:

$curl = curl_init(“http://testing-ground.extract-web-data.com/textlist”);


Luego hay que indicar que CURLOPT_RETURNTRANSFER sea TRUE para retornar la página transferida como una cadena más que ponerla directamente.



curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE); 


Ejecutar la solicitud y revisar errores



Ahora, hacemos la solicitud de la página y chequeamos errores.



$page = curl_exec($curl); 

 
if(curl_errno($curl)) // check for execution errors

{
    echo 'Error del scraper: ' . curl_error($curl);
    exit;

}


Cerrar la conexión



Para cerrar la conexión, escribe lo siguiente:



curl_close($curl); 


Extraer la parte que se necesita e imprimirla



Después que tenemos el contenido de la página, podemos extraer sólo lo que necesitamos bajo el id = “case_textlist”:



$regex = '<div id="case_textlist">(.*?)<\/div>/s'; 

if ( preg_match($regex, $page, $list) )

    echo $list[0];
else

    echo "No se encontró";


Listado completo del scraper



<?php 

$curl = curl_init('http://testing-ground.extract-web-data.com/textlist');

curl_setopt($curl, CURLOPT_RETURNTRANSFER, TRUE);  
$page = curl_exec($curl);  
if(curl_errno($curl)) // check for execution errors


{
    echo 'Error del Scraper: ' . curl_error($curl);

    exit;
}  
curl_close($curl);  
$regex = '/<div id="case_textlist">(.*?)<\/div>/s';

if ( preg_match($regex, $page, $list) )

    echo $list[0];

else

    print "No se encontró";

?>

5 comentarios:

Unknown dijo...

andaba buscando algo sencillo para hacer esto y encontré esto y funciona de maravilla, gracias, ahh una sugerencia para que funcione bien el codigo, cambiar el link de curl por http://testing-ground.scraping.pro/textlist y en la parte de imprimir cambiar

echo $list[0]; por print_r($list);

para ver directo que arreglo imprimir, de todas formas gracias

Ikanus dijo...

Gracias Jose Pablo.

sexar dijo...

Excelente, practico sencillo y efectivo, tengo una duda si quiero ingresar estos datos a mi base de datos como puedo hacerlo agradezco mucho la ayuda prestada.

Ikanus dijo...

Hola Cesar, para ingresar los datos a la base de datos se pueden utilizar sentencias incluídas en PHP como mysql_query. No lo prometo pero tal vez actualizaré este artículo con un ejemplo de inserción en la base de datos.

sexar dijo...

excelente aplicare tu consejo, seria una gran ayuda que publicaras un articulo con este tema. Agradezco mucho tu ayuda y tiempo prestado.