Ya estamos transitando el año 2020 y el principal activo está pasando a ser, si es que ya no lo es: los datos.
¿Alguna vez escuchaste hablar o nombrar el concepto de Web Scraping? En este post vamos a ver algunos conceptos y un ejemplo práctico sobre como obtener datos de la web utilizando ésta técnica (Ya te adelante de qué va el concepto ?)
¿Qué es Web Scraping?
Su nombre en Inglés parece que tiende a ser algo muy complejo, pero en realidad es algo sencillo. Que incluso quizas en el día a día lo haces. Web scraping o raspado de la web, es una técnica para extraer información de Internet. Mencioné que tal vez en tu día a día lo haces, porque hacer un copiar y pegar, por ejemplo, recetas de cocina de la web y bajartelos a un documento en tu computadora también es hacer de cierta manera un raspado de la web. Pero la idea del web scraping es que ese proceso se haga de forma automática. Esto quiere decir, programar algún bot para que realice el trabajo.
Y quizás te preguntes ¿Para qué quisiera extraer datos de la web?
Hoy en día, al ser los datos un activo muy importante, hacer web scraping puede facilitar el trabajo en muchos aspectos para las empresas. Te voy a nombrar algunos casos prácticos donde podría ser muy útil:
Análisis de datos: Con el crecimiento acelerado que está teniendo el Machine Learning, extraer información de la web y someterlo a un análisis por medio de un modelo entrenado, son uno de los principales usos que se les puede brindar.
Seguimiento de precios o cartera de otras empresas: Tambiés es muy común que las empresas quieran saber los precios y la cartera de productos de su competencia, para ello es que se contratan servicios de web scraping que permitan recolectar esta información. Y quizás te preguntes ¿Ésto es legal?, a esta pregunta la responderemos mas adelante.
Cool Hunting: En marketing este concepto es muy utilizado, ya que las empresas las usan para mejorar su posicionamiento. Web scraping se utiliza en cool hunting para saber qué es lo que piensan las marcas, o incluso para saber qué productos van a tener un trending alto, y así aprovechar mediante ésta técnica mucho mejor el marketing de la empresa.
Existen muchísimas otras razones que son beneficiadas por web scraping.
¡CUIDADO! Puedes meterte en problemas.
¡ Si ! no es hacer un bot, extraer información y listo. Si bien, aún no está claro qué cosas están prohibidas o no, hay que saber que hacer web scraping no es ilegal.
Pero si no prestas atención a ciertos requisitos de la página a la cual quieres acceder con un bot para extraer información, puedes meterte en problemas e incluso ir a la cárcel ?
Para evitar meterte en problemas o mejor dicho, para reducir la posibilidad de que tengas problemas al hacer web scraping te voy a dejar unos tips a tener en cuenta:
Términos y condiciones: Leer siempre los términos y condiciones de la página para verificar si dentro de ellas, existe algún ítem donde mencionen qué acciones permiten y cuales no.
Robots.txt: Éste es un archivo que contiene todas las direcciones donde la página no permite que se realice web scraping. Lo encontramos siempre en el directorio principal de página /robots.txt. Por ejemplo, puede acceder al archivo del diario ole.
Quizás también te preguntes por qué algunas empresas no permiten que se les realice web scraping, y la respuesta es sencilla y variada. Pueden ser varias las razones, y una de las principales es que un bot consume recursos de su servidor, con lo cual haría mucho mas lento su sistema. Por está razón incluso hay páginas que permiten hacer web scraping pero con un límite de peticiones cada cierto tiempo. Otra de las razones puede ser simplemente que la empresa no quiere que su información sea consumida por una persona, o tal vez, dependiendo de cuál es el propósito de la extracción de datos. Por eso, es muy importante, identificar al scraper para que indiques que eres tú y sepan como utilizarás su información.
Extrayendo citas de autores
¡ Genial ! Ahora que ya tienes un poquito de contexto de lo que significa web scraping, vamos a pasar a un ejemplo práctico.
Antes de arrancar deberías tener instalado y configurado Python. Una vez que ya lo tengas instalado vamos a abrir una consola. Te recomiendo que uses cmder lo puedes descargar de aquí ?
Desde la consola, vamos a dirigirnos a la carpeta donde vamos a crear el proyecto. En mi caso quote.
Para evitar tener inconvenientes con las demás dependencias a nivel global del sistema, vamos a crear un entorno virtual con el siguiente comando:
python -m venv venv
Luego vamos a acceder al al entorno virtual:
.\venv\Scripts\activate
Siempre es conveniente tener actualizado pip, así que como una buena práctica vamos a hacerlo, escribiendo el siguiente comando:
python -m pip install pip --upgrade
Bien, ahora ya tenemos preparado el entorno para comenzar a instalar las dependecias y luego a codificar el scraper. En este caso instalaremos 3 dependecias: requests que es básicamente un librería para hacer peticiones HTTP. Para interiorizarte te dejo la url de la documentación. También usaremos lxml que nos servirá para usar xpath dentro de python de manera muy básica y autopep8 que nos servirá para formatear el código.
Quizás mas adelante suba algún tutorial de xpath que es la que nos permite identificar los elementos dentro de un documento.
pip install requests lxml autopep8
Perfecto! Ahora que ya tenemos todo instalado, vamos a crear un archivo llamado scraper.py dentro del directorio del proyecto. Dentro de dicho archivo, vamos a pegar el siguiente código en Python:
import requests import lxml.html as html import os import datetime URL = 'http://quotes.toscrape.com/' XPATH_QUOTE = '//div[@class="quote"]/span[@class="text" and @itemprop="text"]/text()' XPATH_AUTHOR = '//div[@class="quote"]/span[not(@class)]/small/text()' def run(): try: response = requests.get(URL) if response.status_code == 200: content = response.content.decode('utf-8') parsed = html.fromstring(content) try: quotes = parsed.xpath(XPATH_QUOTE) authors = parsed.xpath(XPATH_AUTHOR) except IndexError: return with open(f'frases.txt', 'w', encoding='utf-8') as f: f.write(f'Frases: \n') for ph in quotes: f.write(ph) f.write('\n') f.write('\n') f.write(f'Autores: \n') for auth in authors: f.write(auth) f.write('\n') else: raise ValueError(f'Error: {response.status_code}') except ValueError as ve: print(ve) if __name__ == "__main__": run()
Ahora iremos a la consola, dentro del directorio del proyecto y ejecutaremos el scraper que nos extraerá las frases y los autores de http://quotes.toscrape.com/ en un archivo txt.
Entonces ejecutamos lo siguiente:
python scraper.py
Una vez que hayamos terminado con este paso, dentro del directorio veremos un arhivo frases.txt con todas las frases y los autores de la página.
No solamente puedes extraer en formato txt, sino en el formato que desees, ya sea JSON, CSV, etc.
Así que te dejo el desafío para que extraigas no solo las frases y autores de la primer página, sino de todo el sitio, y además que lo exportes en un formato JSON o CSV ?
Y dejame un comentario para ver que tal te fue ?