Scraping con Python usando Scrapy Library
Seguimos experimentando y aprendiendo cositas del lenguaje más usado en la actualidad.
En esta oportunidad vamos a usar Scrapy, una librería de rastreo y scraping web de alto nivel. Se puede utilizar para una amplia gama de propósitos, desde la minería de datos 👀 a la monitorización 📉 y las pruebas automatizadas 💻
Cabe destacar que voy a usar un ejemplo de Ikuffo, no lo conozco pero me cae bien, AQUÍ su repositorio. Tiene muchos de ejemplos con varios sitios, me está ayudando un montón aprender Python. Todo el crédito para él 👏
Primero, vamos a importar las funciones específicas que nos ofrece scrapy para luego poder armar los datos como necesitamos.
Después, podemos crear una clase Articulo, el cuál va definir el comportamiento de nuestro caso de uso.
Creamos nuestra clase MercadoLibre que hereda la clase CrawlSpider, dentro de ella hacemos las siguientes configuraciones:
custom_settings:
Es un diccionario que contiene configuraciones personalizadas para la araña de Scrapy. Estas configuraciones pueden anular las configuraciones predeterminadas.
'USER_AGENT'
: se establece un user agent personalizado para la araña. El user agent es una cadena de texto que se envía al servidor web al realizar una solicitud. Se utiliza para identificar al cliente que realiza la solicitud. En este caso, el user agent es'Mozilla/5.0 (Macintosh; Intel Mac OS X 13_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/108.0.0.0 Safari/537.36'
, que se hace pasar por un navegador Chrome en un sistema operativo Mac.'CLOSESPIDER_PAGECOUNT'
: se establece un límite para el número de páginas que se deben analizar antes de cerrar la araña. En este caso, la araña se cerrará después de analizar 10 páginas.
Estas configuraciones personalizadas son útiles para evitar bloqueos por parte del servidor o para simular un comportamiento más humano al realizar solicitudes web.
download_delay:
Es una configuración en Scrapy que especifica el tiempo de espera en segundos entre cada solicitud realizada por la araña. Esto ayuda a evitar la sobrecarga de solicitudes al servidor web y a simular un comportamiento más humano al realizar solicitudes web.
allowed_domain:
Es una configuración en Scrapy que limita el alcance de la araña a un conjunto específico de dominios.
start_urls:
Es una configuración en Scrapy que especifica las URLs iniciales a las que la araña debe enviar solicitudes web para comenzar a rastrear y extraer información.
rules:
Es una configuración en Scrapy que define cómo la araña debe seguir los enlaces y extraer información de las páginas web. Las reglas se definen como objetos Rule
y especifican una o más condiciones que deben cumplirse antes de que la araña siga un enlace y extraiga información de la página web correspondiente.
Por último tenemos dos funciones definidas, Limpiartext que va limpiar el texto que viene del scraping y parse_items que va viajar por los nodos del html para extraer la info de cada una de las etiquetas. En esta última usamos ItemLoader que es una clase en Scrapy que se utiliza para cargar y transformar los datos extraídos de las páginas web en objetos Item
de Scrapy. add_xpath
es un método de ItemLoader
que se utiliza para extraer datos de una página web utilizando expresiones XPath.
Para ejecutar el script, nos colocamos en la raiz del proyecto y ejecutamos:
scrapy runspider filename.py -o filename.csv -t csv
Esto va descargar toda la info que encuentre del sitio, teniendo en cuenta la config y los límites lanzando un csv.
Espero que les guste, saludos!