Google+ Seguidores

martes, 23 de enero de 2018

Web Scraping - Extrayendo Información de Paginas Webs

Introducción:

¿Que hacemos cuando nos gusta el diseño de una pagina web? Nos vamos directo a "Inspeccionar" ¿Verdad?. Lo mismo cuando queremos pedazos de código de scripts, o queremos saber como hicieron esa animación css tan espectacular. O queremos robarles el código hexodecimal de esos colores que nos encantan.

Sí, es muy fácil, solo click derecho e inspeccionar. ¿Pero como haríamos si quisiéramos obtener todas las imágenes de una pagina en concreto, o quisiéramos todos los párrafos de una pagina? Hacer eso a mano no es muy agradable ¿Cierto? .

Supongamos que debemos cumplir una misión llamada "Topo.com", la cual consiste en escribir un script que sea capaz  de guardar en un archivo de texto todas las imágenes y links de una pagina web.

Muy bien, como lograríamos cumplir este objetivo. ¿Lo harías a mano, usando el inspeccionador de elementos?. Si dijiste que sí, no tienes mucha imaginación.

Para problemas como estos se requieren de métodos especiales, como lo es el Web Scraping.

En el día de hoy les hablare sobre que es el web scraping, como funciona, sus usos, tecnicas, y al final realizaremos un software que resuelva el problema que plantee hace unos momentos.

¿Están listos para trabajar en la misión "Topo.com"? Pues comencemos.

Imagen relacionada

Web Scraping - Extrayendo información de la web:

¿Que es Web Scraping? El web scraping, es un proceso que nos permite extraer y recopilar información de una paginas web de forma automatizada. Estos software simulan la navegación de un usuario en la World Wide Web (WWW), ya sea utilizando el protocolo HTTP (Protocolo de Transferencia de Hipertexto), o incrustando navegadores web en aplicaciones.

El web scraping, se enfoca en trasformar datos sin estructurar que se encuentran en la web (como los documentos HTML), en datos estructurados que se pueden almacenar en una base de datos, o en alguna otra fuente de almacenamiento.

El web scraping tiene muchos usos, entre ello: Comparación de precios en tiendas, la monitorización de datos relacionados al clima de cierta región, la detección de cambios en un sitio web, entre otros.

Técnicas para realizar web scraping:

Una de las técnicas para realizar web scraping es conocida como "Copiar y Pegar", la cual es hecha por una persona. En muchas ocasiones es útil, ya que ciertas paginas colocan barreras contra los scrapers, impidiendo que los software sigan excavando la web, así que en estos casos, una persona hará un mejor trabajo.

La otra técnica, la cual es la más usada por que simula a un navegador web, es enviando peticiones HTTP a la pagina para luego procesar la respuesta. La respuesta se puede procesar utilizando expresiones regulares para extraer la información que deseamos del cuerpo HTML de la pagina.

Medidas para detener a los scrapers:

Si eres administrador web, puedes tomar unas medidas preventivas contra los scrapers, a continuación te mostrare una lista proporcionada por nuestros amigos de Wikipedia:

  1. Añadir entradas al fichero robots.txtGoogle y otros bots pueden ser detenidos de esta forma.
  2. Bloquear la dirección IP. Esto también bloqueará todos los accesos desde esa misma IP, por lo que los usuarios no podrán navegar por el sitio web si acceden desde esta.
  3. Deshabilitar cualquier interfaz de programación de aplicaciones que el sitio web pudiera estar brindando.
  4. Los bots o scrapers algunas veces declaran quienes son, y gracias a esto pueden ser bloqueados. «Googlebot» es un ejemplo. Algunos scrapers no hacen distinción entre ellos y un navegador común.
  5. Monitorear el exceso de tráfico proveniente de cierta IP.
  6. Añadir un captcha u otro sistema de verificación manual al sitio web. No se garantiza el completo bloqueo de los scrapers, pero mediante esta técnica se dificulta el acceso de los mismos a los sitios webs.
  7. Servicios comerciales antibots: algunas empresas ofrecen servicios antibots y antiscraping.
  8. Incrementar el uso de JavaScript y AJAX. De esta forma es más difícil para los scrapers simular las peticiones como si fueran un navegador común.

Herramientas útiles:

Existen varios software que nos permiten realizar web scraping, entre ellos:

Proyecto Scraped:

Perfecto, vemos que existen muchos software para el web scraping, pero como programadores que somos, realizaremos nuestro propio software a la medida y que cumpla el objetivo de hoy. Así que llego el momento de iniciar el "Proyecto Scraped".

Muy bien, analicemos el problema: Debemos extraer el cuerpo de la pagina web (Documento HTML) que se le proporcione al software, para que luego este pueda extraer todas las etiquetas img y a que se encuentren dentro del documento HTML, para ello se debe procesar el contenido del documento ya que no queremos toda la etiqueta si no simplemente la URL de las imágenes y lo mismo con los links. Luego, guardaremos las imágenes y links dentro de un archivo de texto.

Todo este procedimiento lo programaremos en un simple scripts:


En esta primera parte del script creamos una conexión con cualquier pagina web, yo escogí a pythondiario.com pero pueden escoger la que sea de su preferencia. Luego de crear la conexión, hacemos una petición GET, pidiendo el archivo "index.html". Una vez recibido el recurso solicitado, parseamos el contenido para que sea más fácil obtener los datos deseados.

Si no sabes mucho sobre las peticiones HTTP, te recomiendo leer el siguiente articulo: El nacimiento de la World Wide Web y los Fundamentos de la web (HTTP y HTML).

Muy bien, ya tenemos el cuerpo de la web, ahora debemos "excavar", y obtener todas las etiquetas img y a que se encuentren en  la pagina.


En esta parte del script, creamos nuestro archivo de texto, y en el escribimos los datos extraídos de la web.

El documento generado, debería quedar así:

 
Como pueden observar, el archivo es extremadamente largo.

¿Que les pareció? ha sido un ejemplo sencillo, pero esto es solo una minúscula parte de lo que se puede lograr con web scraping. Con el web scraping se pueden lograr cosas increíbles, queda de tu parte experimentar y probar.

Y como dijo mi tío ben un día, "un gran poder, conlleva a una gran responsabilidad", así que espero que uses estos conocimiento de manera adecuada.

Bueno, eso es todo de mi parte. ¿Que esperas? Crear tu software de web scraping y envíanoslo, queremos ver que tal te quedo.

Descarga el codigo completo del ejemplo de hoy desde GitHub: Web Scraping (Topo.com).py.

Mi nombre es Luis, y fue un placer compartir mis conocimientos con todos ustedes :D.

3 comentarios :
Write comentarios
  1. muy bien, continua, nos vemos en la proxima. bendiciones

    ResponderEliminar
  2. Buenas noches. Como puedo controlar errores de conexión o de timeout? Gracias.

    ResponderEliminar

Tu comentario es importante y nos motiva a seguir escribiendo...

Entradas más recientes

Powered by Blogger .