Descubra cómo raspar tablas JavaScript con Python
Andrei Ogiolan el 24 abr 2023

Introducción
El web scraping es una potente herramienta que permite extraer datos de sitios web y utilizarlos con diversos fines. Se puede utilizar para recopilar datos para la inteligencia de negocios, realizar un seguimiento de los cambios en los sitios web, o construir sus propias aplicaciones web. En este artículo, nos centraremos en cómo raspar tablas JavaScript utilizando Python.
¿Qué son las tablas JavaScript?
Las tablas JavaScript son una forma común de mostrar datos tabulares en la web, y se pueden encontrar en una amplia gama de sitios web. Extraer estas tablas puede ser complicado porque 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 librerías requeridas. A continuación, recorreremos 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, discutiremos algunas formas de mejorar la eficiencia y la fiabilidad del proceso de scraping, y por qué puede ser mejor utilizar un scraper profesional para tareas más complejas.
Puesta en marcha
Antes de que podamos empezar a raspar tablas JavaScript con Python, hay 2 requisitos previos que tenemos que tener en cuenta:
- Python: Este tutorial asume que tienes Python instalado en tu máquina. Si no tienes Python instalado, puedes descargarlo de la web oficial y seguir las instrucciones para tu sistema operativo.
- Un controlador web: Para cargar e interactuar con páginas web usando Python, necesitaremos usar 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, necesitarás instalar las siguientes librerías:
- Selenium: Selenium es una librería que 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 librería como Selenium en lugar de peticiones Python porque se puede esperar hasta que un elemento generado por JavaScript aparezca en la página en caso de que no esté presente cuando se cargue la página web.
- Pandas: Pandas es una librería 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, abra un terminal o símbolo del sistema y utilice el comando pip para instalarlas:
$ pip install selenium pandas
Ya está. Ya estás listo para empezar a scrapear tablas JavaScript con Python. En la siguiente sección, recorreremos el proceso paso a paso.
Empecemos a raspar
Ahora que tenemos todas las herramientas necesarias instaladas, es hora de empezar a raspar tablas JavaScript con Python. El proceso implica los siguientes pasos
- Cargue la página web que contiene la tabla utilizando Selenium y un controlador web.
- Extraer los datos de la tabla utilizando Selenium y Python.
- Almacenar y manipular los datos utilizando Pandas.
Veamos cada uno de estos pasos con más detalle:
Paso 1: Cargar la página web
Lo primero que tenemos que hacer es cargar la página web que contiene la tabla que queremos raspar. Podemos hacer esto usando Selenium y un controlador web.
En primer lugar, vamos a importar 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:
# Sustituya "path/to/chromedriver" por la ruta a su ejecutable ChromeDriver
driver = webdriver.Chrome(service=Service('path/to/chromedriver'))
# Cargue la página web
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 tenga 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 maneras de hacerlo, pero un método es utilizar la función driver.find_elements(By.CSS_SELECTOR, 'td') para localizar las celdas de la tabla y extraer el texto de cada celda.
He aquí un ejemplo de cómo extraer los datos de una tabla sencilla con dos columnas:
# Encuentra todas las filas de la tabla
rows = driver.find_elements(By.CSS_SELECTOR, 'table tr')
# Para cada fila, encuentra las celdas y extrae el texto
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()
Recuerde que puede necesitar utilizar un selector CSS diferente dependiendo de la estructura de la tabla y de los elementos que contenga. Puedes utilizar las herramientas para desarrolladores de tu navegador web para inspeccionar la página y encontrar el selector adecuado.
Paso 3: Almacenar y manipular los datos
Una vez que haya extraído los datos de la tabla, puede almacenarlos en un marco de datos Pandas y manipularlos como necesite. Aquí tienes 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'))
# Utiliza el webdriver para cargar una página web
driver.get('https://html.com/tags/table/')
# Al extraer contenido generado por JavaScript, es importante esperar unos segundos
time.sleep(4)
table = driver.find_element(By.CSS_SELECTOR, 'table')
# Para cada fila, busca las celdas y extrae el texto
df = pd.read_html(table.get_attribute('outerHTML'))
print(df)
driver.close()
Profundizar
Aunque los pasos descritos anteriormente le permitirán raspar tablas JavaScript utilizando Python, hay algunas formas de mejorar la eficacia y fiabilidad del proceso.
Una forma de mejorar la eficiencia es utilizar un navegador 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 cabeza con Selenium, puede utilizar la bandera --headless al crear la instancia del controlador web.
Otra forma de mejorar la eficacia es utilizar un servicio que proporcione direcciones IP rotativas, como un servidor proxy. Esto puede ayudarle a evitar ser detectado como scraper y bloqueado por el sitio web, ya que la dirección IP de la solicitud parecerá cambiar con cada petición. WebScrapingAPI es un servicio que ofrece la posibilidad de raspar un sitio web utilizando un servidor proxy. Puedes aprender más sobre cómo utilizar proxies para el web scraping, 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 Selenium simple cuando se trata de conectarse a un servidor proxy. Como cualquier otro paquete de Python, puede instalarlo simplemente ejecutando el siguiente comando:
$ pip install selenium-wire
A continuación, puede utilizar el siguiente ejemplo de codificación para utilizar 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 eficacia y la fiabilidad de su raspado web, es importante señalar que están fuera del alcance de este artículo. Para tareas de scraping más complejas, puede ser más eficiente y fiable utilizar un scraper profesional, como WebScrapingAPI. Esta herramienta proporciona funciones adicionales, como la rotación de IP y la omisión de CAPTCHA, que pueden hacer que el proceso de raspado sea mucho más sencillo y fiable.
En la siguiente sección, resumiremos los pasos para el scraping de tablas JavaScript con Python y discutiremos los beneficios de utilizar un scraper profesional para tareas más complejas.
Resumen
En conclusión, el scraping de tablas JavaScript con Python es una forma poderosa de extraer datos de sitios web y utilizarlos para una variedad de propósitos. 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.
Noticias y actualidad
Manténgase al día de las últimas guías y noticias sobre raspado web suscribiéndose a nuestro boletín.
We care about the protection of your data. Read our <l>Privacy Policy</l>.Privacy Policy.

Artículos relacionados

Explore las complejidades del scraping de datos de productos de Amazon con nuestra guía en profundidad. Desde las mejores prácticas y herramientas como Amazon Scraper API hasta las consideraciones legales, aprenda a superar los desafíos, eludir los CAPTCHA y extraer información valiosa de forma eficiente.


Conozca cuál es el mejor navegador para eludir los sistemas de detección de Cloudflare mientras hace web scraping con Selenium.


Aprenda a raspar tablas HTML con Golang para una potente extracción de datos. Explore la estructura de las tablas HTML y construya un raspador web utilizando la simplicidad, la concurrencia y la robusta biblioteca estándar de Golang.
