Web scraping de MercadoLibre

Aviso: Mientras preparaba el artículo fui baneado un par de veces de MercadoLibre. Tuve que cambiar de IP para acceder.

En este artículo vamos a ver cómo hacer web scraping para obtener datos de inmuebles de MercadoLibre. Para descargar los datos vamos a utilizar la herramienta Scrapy.

El primer paso será crear un entorno virtual para hacer que los resultados sean reproducibles en otros ordenadores. Trabajaré en una carpeta llamada webscrap_mercadolibre. Utilizaré Venv para generar el entorno virtual ya que viene instalado por defecto con Python.

python -m venv webscrap_mercadolibre_env
webscrap_mercadolibre_env\Scripts\activate.bat

Lo siguiente que haremos es instalar las librerías necesarias:

pip install scrapy pandas

Una vez instaladas todas las librerías, comparto el archivo requirements.txt para que puedas instalar las mismas librerías.

Objetivo: Bogotá

El objetivo de este scraper será obtener datos de apartamentos en Bogotá. Para ello entraremos a la versión Colombiana de MercadoLibre. Navegaremos por ella hasta acceder al apartado donde están listados los apartamentos en venta en Bogotá.

Apartamentos en venta en Bogotá

Copiaremos la URL para usarla en nuestro código. https://listado.mercadolibre.com.co/inmuebles/apartamentos/venta/bogota-dc/#origin=search&as_word=true

Crearemos un archivo llamado mercadolibre_spider.py. Dentro del archivo copiamos el siguiente código. Ahora lo comentaremos.

import scrapy

class MercadolibreSpider(scrapy.Spider):
    name = 'mercadolibre'
    start_urls = [
        'https://listado.mercadolibre.com.co/inmuebles/apartamentos/venta/bogota-dc/',
    ]

    def parse(self, response):
        for apartamento in response.css('a.item__info-link'):
            yield {
                'precio': apartamento.css('span.price__fraction::text').get(),
                'metros_habitaciones': apartamento.css('div.item__attrs::text').get(),
                'zona': apartamento.css('div.item__title::text').get(),
                'url': apartamento.css('a.item__info-link::attr("href")').get(),
            }

        next_page = response.css('a.andes-pagination__link prefetch::attr("href")').get()
        if next_page is not None:
            yield response.follow(next_page, self.parse)

Iniciamos el código creando la clase MercadolibreSpider basada en la clase Spider de Scrapy. Tenemos que definir unos parámetros:

  • Nombre: Será el nombre que utilizaremos más adelante para ejecutar el spider.
  • URLs iniciales: Es una lista con todas las URLs que descargaremos al inicio para buscar más enlaces en ellas.
  • Función parse: La función define el tratamiento de los datos de cada página descargada. También definiremos qué enlaces de la página seguiremos para seguir buscando datos.

Dentro de la función parse definimos los datos que queremos guardar y cómo encontrarlos. En nuestro caso los datos disponibles son la zona, el precio, los metros cuadrados y las habitaciones (ya que están en el mismo elemento HTML, las hemos agrupado y haremos un procesado posterior para separarlas).

apartamento en mercadolibre

Por otro lado definimos cómo encontrar los datos en el archivo HTML de la web. Utilizamos los selectores CSS que podemos encontrar utilizando el inspector de nuestro navegador. En Firefox, por ejemplo, lo podemos abrir pulsando Ctrl + Shift + C

Inspector de Firefox con MercadoLibre

Finalmente definimos cómo encontrar el link a la siguiente página de la misma forma, buscamos el link de la siguiente página con el inspector y lo anotamos en el código.

Ejecutamos el spider y guardamos los datos descargados en el archivo apartamentos.csv.

scrapy runspider mercadolibre_spider.py -o apartamentos.csv

Ahora que tenemos los datos descargados podemos abrirlos desde un Jupyter notebook y analizarlos o visualizarlos como queramos.

import pandas as pd
pd.read_csv('apartamentos.csv')
datos apartamentos Bogotá
Visualización de los datos

Aviso: este artículo puede quedarse desactualizado en cualquier momento, estamos utilizando la web de MercadoLibre, si ellos cambian cualquier detalle por pequeño que sea en el funcionamiento de su web, todo o parte del código de este artículo puede dejar de funcionar.

Albert Sanchez Lafuente

Estudié Ingenieria Industrial en la UPC. Continué mi formación en inteligencia artificial junto a la asociación Saturdays.AI de la que he formado parte del equipo de Barcelona desde sus inicios.