Hola en esta serie de artículos que estaré escribiendo sobre como hacer scraping con php hablaremos de como extraer la informacion, como la debemos procesar y que temas debemos tener en cuenta para tener un proceso de scraping realmente exitoso.
Lo primero es obtener el codigo del sitio esto es a lo que yo le llamo el proceso de surf jejej, aqui vamos a navegar.
Proceso 1 : Surf
el proceso de extraccion del codigo que vamos a scrapear es tal vez una de los puntos mas faciles de entender pero a tener en cuenta que en algunas circunstancias puede ser tedioso por los sitemas de antibot de algunos sitios.
En algunos casos donde la complejidad no es tan alta con utilizar file_get_contents es suficiente, teniendo en cuenta las configuraciones de tu servidor ya que algunas veces por configuraciones de seguridad no podemos cargar url externas desde esta función, a continuación les dejo la forma practica de hacer surf con file_get_contents
<?php
$site = file_get_contents('https://www.lanacion.com.ar/horoscopo');
con lo anterior podemos hacer surf sobre ese sitio de la nacion que nos entregara el horoscopo en formato html, ahora vamos a un siguiente paso, que sucede si vamos a hacer scraping a sitios con sistema de antibloqueo de bots ? como podemos saltarnos estas reglas, lo primero que debemos hacer identificar estas reglas para esto deberemos hacer varias pruebas repetitivas que nos daran la luz del camino, cuando tengamos identificado esas variantes deberemos poder crear nuestro algoritmo con algo de inteligencia, pero para que no gastes tanto tiempo te voy a dar algunos de las reglas mas comunes, en los sistemas anti-scraping.
- Bloqueo por IP, lo mas común es que te tiren un bloqueo de ip.
- Bloqueo por Agente de Navegación, esto es algo interesante.
- Bloqueo por peticiones por segundo, ojo esto lo podemos solucionar.
Bueno esas son las mas comunes, no son las únicas tengan eso en cuenta, pero hay formas de saltarnos esas reglas y con php también se puede hacer, para esto utilizaremos cURL en vez de file_get_content para cada uno de los casos de la lista anterior tenemos una solución con cURL si nos han realizado un bloque por ip podemos intercalar con túneles vpn o proxies, si nos bloquean por agente de navegación podemos engañar utilizando un numero aleatorio en nuestro agente de navegación y por ultimo si tenemos problemas por las peticiones por segundo deberemos tener en cuenta el tiempo de sueño que le debemos dar a nuestro script con la función sleep.
Listo aquí entendiste pero tendrás preguntas de como se hace cada una de estas recomendaciones ?, aquí te dejo si a ti lector una función que utiliza cURL lista para ser implementada bueno puedes revisar el codigo tanto como quieras.
<?php
function submit_cURL($url, $tunnel = false) {
$curl = curl_init($url);
curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/66.0.3359.181 Chrome/66.0.3359.181 Safari/537.36; ".uniqid()+time().";)");
curl_setopt($curl, CURLOPT_FAILONERROR, true);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER, array(
':authority: www.amazon.com',
':method: GET'
));
if($tunnel){
//echo 'tunnel-passed'.chr(10);
curl_setopt($curl, CURLOPT_INTERFACE, "tun0");
}
$html = curl_exec($curl);
$info = curl_getinfo($curl);
curl_close($curl);
return ['html' => $html,'i' => $info];
}
esta función la utilice para scrapear a amazon, por eso encontraras una cabeceras de amazon, devuelve a un usuario un arreglo, divido en dos el código de fuente en html y la informacion sobre la consulta realizada.
Para tener en cuenta, algunos sitios envían la informacion con comprensión gzip y debido a esto vas a ver muchos garabatos que no te dejaran entender nada y mucho menos procesar la informacion, para esto puedes utilizar la función gzdecode con esta se hace la descompresión y vuelves legible el código html obtenido.
Bueno con esto terminamos la primera parte de esta serie de artículos de como hacer scraping con php. 😀 pronto muy pronto viene la segunda parte.

