lunes, 2 de febrero de 2015

[Parte 7] Web Scraping

El uso de proxies

El uso de proxies para web scraping

Uno de los problemas comunes de scraping en un sitio con gran tamaño de datos es que su ip puede ser baneada o bloqueada por solicitar demasiadas paginas en poco tiempo, ya sea de forma automatica o por el administrador del servidor. Una manera de salir de esto es utilizar servidores proxy.
Un servidor proxy es un servidor que actua como intermediario para solicitudes de clientes en busca de recursos de otros servidores. El uso de servidores proxy permite a sus peticiones pasar por muchas direcciones ip diferentes y por lo tanto aparece ser que viene de diferentes lugares. 
Existen muchos tipos de servidores proxy - tanto gratuitos como de paga. Proxies de paga son los mejores para trabajos de web scraping donde te estan pagando (trabajos serios), para servidores proxy gratis puede ver una lista aqui: http://www.freeproxylists.net/


Proxies con cURL

Suponiendo que haya reducido su lista de servidores proxy, tenemos que cargarla en una matriz para que podamos utilizarlo con cURL.

$proxies = array();
$proxies[] = '187.28.84.130';
$proxies[] = '190.0.58.58';
/* Algunas proxies usan puerto */
$proxies[] = '199.15.248.179:8089';
/* Algunas proxy requieren usuario y contraseña */
$proxies[] = 'user:password@121.9.214.133'
;


Si hay varios servidores proxy que figuran en la matriz, lo mejor es elegir al azar cada vez.


if (isset($proxies)) {
/* Seleccionamos una proxy aleatoria */
$proxy = $proxies[array_rand($proxies)];
}


Finalmente utilizamos el servidor proxy en nuestra sesion cURL.

$ch = curl_init('http://ejemplo.com');
if (isset($proxy)) {
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$res = curl_exec($ch);
curl_close($ch);


A continuacion se muestra el codigo completo.

<?php
$proxies = array();
$proxies[] = '187.28.84.130';
$proxies[] = '190.0.58.58';
/* Algunas proxy usan numero de puerto */
$proxies[] = '199.15.248.179:8089';
/* Algunas proxy requieren usuario y contraseña */
$proxies[] = 'user:password@121.9.214.133';
if (isset($proxies))
{
/* Seleccionamos una proxy aleatoria */
$proxy = $proxies[array_rand($proxies)];
}
$ch = curl_init('http://ejemplo.com');
if (isset($proxy))
{
curl_setopt($ch, CURLOPT_PROXY, $proxy);
}
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
$res = curl_exec($ch);
curl_close($ch);
?>


Si la conexion falla, 'curl_exec' devuelve '0', asi que asegurese de comprobar con otro proxy. Sin embargo, puede suceder que ninguno de los servidores proxy son actualmente accesibles. Esto suele suceder cuando se utiliza proxy gratis. Asi que si usted tiene un proyecto de web scraping serio, me gustaria sugerirle el uso de proxies de paga que es fiable y que tenga soporte al cliente. 


Por lo general encontramos que para los pequeños proyectos de web scraping no se requiere proxy si acabamos de escalonar las peticiones al servidor remoto, es decir, añadir un poco de retraso aleatorio entre sucesivas peticiones. Entonces para los pequeños proyectos, es mejor comprobar primero si las solicitudes trabajan bien y solo entonces utilizar un proxy.
 

No hay comentarios:

Publicar un comentario en la entrada