Volver al blog
Guías
Andrei OgiolanLast updated on Mar 31, 20266 min read

Descubre cómo extraer datos de tablas JavaScript con Python

Descubre cómo extraer datos de tablas JavaScript con Python

Introducción

El web scraping es una potente herramienta que permite extraer datos de sitios web y utilizarlos para diversos fines. Se puede emplear para recopilar datos para la inteligencia empresarial, realizar un seguimiento de los cambios en los sitios web o crear tus propias aplicaciones web. En este artículo, nos centraremos en cómo extraer tablas JavaScript utilizando Python.

¿Qué son las tablas JavaScript?

Las tablas JavaScript son una forma habitual de mostrar datos tabulares en la web y se pueden encontrar en una amplia variedad de sitios web. Extraer datos de estas tablas puede resultar complicado, ya que los datos suelen estar incrustados en el código fuente de la página como un objeto JavaScript, en lugar de en una tabla HTML estándar. Sin embargo, con las herramientas y técnicas adecuadas, es posible extraer estos datos utilizando Python.

Comenzaremos configurando las herramientas necesarias e instalando las bibliotecas requeridas. A continuación, repasaremos el proceso de uso de Python y un controlador web para cargar la página web y extraer los datos de la tabla. Por último, analizaremos algunas formas de mejorar la eficiencia y la fiabilidad del proceso de extracción, y por qué puede ser mejor utilizar un extractor profesional para tareas más complejas.

Configuración

Antes de poder empezar a extraer datos de tablas JavaScript con Python, hay dos requisitos previos que debemos cumplir:

  • Python: Este tutorial da por hecho que tienes Python instalado en tu equipo. Si no lo tienes instalado, puedes descargarlo desde la página web oficial y seguir las instrucciones correspondientes a tu sistema operativo.
  • Un controlador web: Para cargar e interactuar con páginas web utilizando Python, necesitaremos un controlador web. Hay varias opciones disponibles, como ChromeDriver, FirefoxDriver y SafariDriver. Para este tutorial, utilizaremos ChromeDriver.

Una vez que tengas Python y un controlador web instalados, tendrás que instalar las siguientes bibliotecas:

  • Selenium: Selenium es una biblioteca que te permite controlar un navegador web a través de Python. La utilizaremos para cargar e interactuar con la página web que contiene la tabla. Cuando se trata de tablas JavaScript, es importante utilizar una biblioteca como Selenium en lugar de Python requests, ya que puedes esperar a que aparezca en la página un elemento generado por JavaScript en caso de que no esté presente cuando se carga la página web.
  • Pandas: Pandas es una biblioteca que proporciona estructuras de datos y herramientas de análisis de datos fáciles de usar para Python. La utilizaremos para almacenar y manipular los datos que extraigamos de la tabla.

Para instalar estas bibliotecas, abre un terminal o una línea de comandos y utiliza el comando pip para instalarlas:

$ pip install selenium pandas

¡Ya está! Ahora estás listo para empezar a extraer datos de tablas JavaScript con Python. En la siguiente sección, repasaremos el proceso paso a paso.

Empecemos a extraer datos

Ahora que tenemos todas las herramientas necesarias instaladas, es hora de empezar a extraer datos de tablas JavaScript con Python. El proceso implica los siguientes pasos

  • Carga la página web que contiene la tabla utilizando Selenium y un controlador web.
  • Extraer los datos de la tabla utilizando Selenium y Python.
  • Almacena y manipula los datos utilizando Pandas.

Repasemos cada uno de estos pasos con más detalle:

Paso 1: Cargar la página web

Lo primero que debemos hacer es cargar la página web que contiene la tabla que queremos extraer. Podemos hacerlo utilizando Selenium y un controlador web.

En primer lugar, importemos las bibliotecas necesarias:

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

import time

A continuación, crearemos una instancia del controlador web y la utilizaremos para cargar la página web:

# Replace "path/to/chromedriver" with the path to your ChromeDriver executable

driver = webdriver.Chrome(service=Service('path/to/chromedriver'))

# Load the webpage

driver.get('https://html.com/tags/table/')

Es importante tener en cuenta que la página web debe estar completamente cargada antes de extraer los datos de la tabla. Es posible que tengas que utilizar la función driver.implicitly_wait() para esperar a que se cargue la página, o utilizar la función driver.find_element(By.*, ‘’) para esperar a que se cargue un elemento específico de la página.

Paso 2: Extraer los datos

Una vez cargada la página web, podemos utilizar Selenium para extraer los datos de la tabla. Hay varias formas de hacerlo, pero un método consiste en utilizar la función driver.find_elements(By.CSS_SELECTOR, ‘td’) para localizar las celdas de la tabla y extraer el texto de cada una de ellas.

A continuación se muestra un ejemplo de cómo extraer los datos de una tabla sencilla con dos columnas:

# Find all of the rows in the table

rows = driver.find_elements(By.CSS_SELECTOR, 'table tr')

# For each row, find the cells and extract the text

for row in rows:

    try:

        cells = row.find_elements(By.CSS_SELECTOR, 'td') or row.find_elements(By.CSS_SELECTOR, 'th')

    except:

        continue

    for cel in cells:

        print(cel.text, end= " ")

    print()

driver.quit()

Recuerda que es posible que tengas que utilizar un selector CSS diferente dependiendo de la estructura de la tabla y de los elementos que contenga. Puedes utilizar las herramientas de desarrollo de tu navegador web para inspeccionar la página y encontrar el selector adecuado.

Paso 3: Almacenar y manipular los datos

Una vez extraídos los datos de la tabla, puedes almacenarlos en un dataframe de Pandas y manipularlos según sea necesario. A continuación, te mostramos un ejemplo de cómo hacerlo:

from selenium import webdriver

from selenium.webdriver.chrome.service import Service

from selenium.webdriver.common.by import By

import time

import pandas as pd

df = pd.DataFrame()

driver = webdriver.Chrome(service=Service('/path/to/chromedriver'))

# Use the webdriver to load a webpage

driver.get('https://html.com/tags/table/')

# When scraping JavaScript generated content it is important to wait a few seconds

time.sleep(4)

table = driver.find_element(By.CSS_SELECTOR, 'table')

# For each row, find the cells and extract the text

df = pd.read_html(table.get_attribute('outerHTML'))

print(df)

driver.close()

Profundizando

Aunque los pasos descritos anteriormente te permitirán extraer tablas JavaScript utilizando Python, existen algunas formas de mejorar la eficiencia y la fiabilidad del proceso.

Una forma de mejorar la eficiencia es utilizar un navegador sin interfaz gráfica (headless), que es un navegador que se ejecuta en segundo plano sin interfaz gráfica de usuario. Esto puede ser más rápido que ejecutar un navegador completo y consume menos recursos. Para utilizar un navegador sin interfaz gráfica con Selenium, puedes usar el indicador --headless al crear la instancia del controlador web.

Otra forma de mejorar la eficiencia es utilizar un servicio que proporcione direcciones IP rotativas, como un servidor proxy. Esto puede ayudarte a evitar que te detecten como un rastreador y te bloqueen en el sitio web, ya que la dirección IP de la solicitud parecerá cambiar con cada solicitud. WebScrapingAPI es un servicio que ofrece la posibilidad de extraer datos de un sitio web utilizando un servidor proxy. Si quieres saber más sobre cómo utilizar proxies para el scraping web, no dudes en consultar nuestra documentación.

Para utilizar un servidor proxy con Selenium, te recomiendo encarecidamente que utilices selenium-wire, ya que es más sencillo que el Selenium básico a la hora de conectarse a un servidor proxy. Al igual que cualquier otro paquete de Python, puedes instalarlo simplemente ejecutando el siguiente comando:

$ pip install selenium-wire

A continuación, puedes utilizar el siguiente ejemplo de código para usar un servidor proxy con Selenium:

from seleniumwire import webdriver

from selenium.webdriver.chrome.service import Service

import time

# Create a webdriver instance with the desired proxy server and authentication details

API_KEY = '<YOUR-API-KEY-HERE>'

options = {

    'proxy': {

        'http': f'http://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',

        'https': f'https://webscrapingapi:{API_KEY}@proxy.webscrapingapi.com:80',

        'no_proxy': 'localhost,127.0.0.1'

    }

}

driver = webdriver.Chrome(service=Service('/path/to/chromedriver'), seleniumwire_options=options)

# Use the webdriver to load a webpage

driver.get('http://httpbin.org/ip')

# When scraping JavaScript generated content it is important to wait a few seconds

time.sleep(5)

# Do something with the page, such as extract data or take a screenshot

# ...

# Close the webdriver

driver.quit()

Aunque estas técnicas pueden ser útiles para mejorar la eficiencia y la fiabilidad de tu web scraping, es importante señalar que quedan fuera del alcance de este artículo. Para tareas de scraping más complejas, puede resultar más eficiente y fiable utilizar un scraper profesional, como WebScrapingAPI. Esta herramienta ofrece funciones adicionales, como la rotación de IP y el bypass de CAPTCHA, que pueden hacer que el proceso de scraping sea mucho más sencillo y fiable.

En la siguiente sección, resumiremos los pasos para extraer tablas JavaScript con Python y analizaremos las ventajas de utilizar un extractor profesional para tareas más complejas.

Resumen

En conclusión, el scraping de tablas JavaScript con Python es una forma eficaz de extraer datos de sitios web y utilizarlos para diversos fines. Tanto si utilizas tu propio código como un scraper profesional, esta técnica puede ser una herramienta valiosa para recopilar datos y obtener información.

Acerca del autor
Andrei Ogiolan, Desarrollador Full Stack @ WebScrapingAPI
Andrei OgiolanDesarrollador Full Stack

Andrei Ogiolan es desarrollador full stack en WebScrapingAPI, donde colabora en todas las áreas del producto y ayuda a crear herramientas y funciones fiables para la plataforma.

Empieza a crear

¿Estás listo para ampliar tu recopilación de datos?

Únete a más de 2000 empresas que utilizan WebScrapingAPI para extraer datos de la web a escala empresarial sin ningún gasto de infraestructura.