Descubra cómo raspar una tabla HTML con Python

Andrei Ogiolan el 11 abr 2023

blog-image

Introducción

El web scraping es una potente herramienta que permite extraer datos de sitios web y utilizarlos para diversos fines, como la minería de datos, el análisis de datos y el aprendizaje automático. Una tarea común en el web scraping es la extracción de datos de tablas HTML, que se pueden encontrar en una variedad de sitios web y se utilizan para presentar datos en un formato estructurado y tabular. En este artículo, aprenderemos a utilizar Python para extraer datos de tablas HTML y almacenarlos en un formato con el que sea fácil trabajar y analizar.

Al final de este artículo, usted tendrá las habilidades y conocimientos para construir su propia web scraper que puede extraer datos de tablas HTML y utilizarlo para una variedad de propósitos. Si eres un científico de datos que busca recopilar datos para su próximo proyecto, un empresario que busca recopilar datos para la investigación de mercado, o un desarrollador que busca construir su propia herramienta de raspado web, este artículo proporcionará un recurso valioso para empezar con el raspado de tablas HTML usando Python.

¿Qué son las tablas HTML?

HTML tables are a type of element in HTML (Hypertext Markup Language) that is used to represent tabular data on a web page. An HTML table consists of rows and columns of cells, which can contain text, images, or other HTML elements. HTML tables are created using the table element, and are structured using the ‘<tr>’ (table row) ,‘<td>’ (table cell), ‘<th>’ (table header), ‘<caption>’ , ‘<col>’, ‘<colgroup>’, ‘<tbody>’ (table body), ‘<thead>’ (table head) and ‘<tfoot>’ (table foot) elements. Now let’s go through each one and get in more detail:

  • elemento table: Define el inicio y el final de una tabla HTML.
  • elemento tr (fila de tabla): Define una fila en una tabla HTML.
  • Elemento td (celda de tabla): Define una celda en una tabla HTML.
  • th (encabezado de tabla): Define una celda de encabezado en una tabla HTML. Las celdas de encabezado se muestran en negrita y centradas por defecto, y se utilizan para etiquetar las filas o columnas de la tabla.
  • elemento caption: Define un título para una tabla HTML. El título suele aparecer encima o debajo de la tabla.
  • elementos col y colgroup: Definen las propiedades de las columnas de una tabla HTML, como la anchura o la alineación.
  • Elementos tbody, thead y tfoot: Definen las secciones body, head y foot de una tabla HTML, respectivamente. Estos elementos pueden utilizarse para agrupar filas y aplicar estilos o atributos a una sección específica de la tabla.

Para entender mejor este concepto, veamos cómo es una tabla HTML:

blog-image

A primera vista parece una tabla normal y no podemos ver la estructura con los elementos descritos anteriormente. Esto no significa que no estén presentes, sino que el navegador ya lo ha analizado por nosotros. Para poder ver la estructura HTML, hay que ir un paso más allá y utilizar dev tools. Para ello, haga clic con el botón derecho en la página, haga clic en inspeccionar, haga clic en la herramienta de selección de elementos y haga clic en el elemento (tabla en este caso) que desea ver la estructura HTML. Después de seguir estos pasos, deberías ver algo como esto:

blog-image

Las tablas HTML se utilizan habitualmente para presentar datos en un formato tabular estructurado, por ejemplo para tabular resultados o mostrar el contenido de una base de datos. Se pueden encontrar en una gran variedad de sitios web y son un elemento importante a tener en cuenta a la hora de escrapear datos de la web.

Puesta en marcha

Antes de empezar a extraer datos de tablas HTML, tenemos que configurar nuestro entorno y asegurarnos de que tenemos instaladas todas las herramientas y bibliotecas necesarias. El primer paso es asegurarse de que tiene Python instalado en su ordenador. Si no tienes Python instalado, puedes descargarlo de la página oficial de Python(https://www.python.org/) y seguir las instrucciones para instalarlo.

A continuación, necesitaremos instalar algunas librerías que nos ayudarán a scrapear datos de tablas HTML. Algunas de las librerías más populares para web scraping en Python son Beautiful Soup, Selenium y Scrapy. En este artículo nos centraremos en el uso de Beautiful Soup, ya que es muy sencilla en comparación con las otras. Beautiful Soup es una librería que facilita el análisis sintáctico de documentos HTML y XML, y es particularmente útil para extraer datos de páginas web. Si bien esto es suficiente para raspar los datos HTML que estamos buscando, no va a ser demasiado legible para el ojo humano en el formato HTML, por lo que es posible que desee analizar los datos de alguna manera. Este es el momento en el que la librería Pandas entra en juego.

Pandas es una biblioteca de análisis de datos que proporciona herramientas para trabajar con datos estructurados, como tablas HTML. Puede instalar estas bibliotecas mediante el gestor de paquetes pip, que se incluye con Python:

$ pip install beautifulsoup4 pandas

Una vez que tengas Python y las librerías necesarias instaladas, estás listo para empezar a extraer datos de tablas HTML. En la siguiente sección, recorreremos los pasos para construir un raspador web que pueda extraer datos de una tabla HTML y almacenarlos en un formato estructurado.

Empecemos a raspar

Ahora que tenemos nuestro entorno configurado y tenemos una comprensión básica de las tablas HTML, podemos empezar a construir un raspador web para extraer datos de una tabla HTML. En esta sección, vamos a caminar a través de los pasos de la construcción de un raspador simple que puede extraer datos de una tabla y almacenarla en un formato estructurado.

El primer paso es utilizar la librería requests para enviar una petición HTTP a la página web que contiene la tabla HTML que queremos scrapear.

Puede instalarlo mediante pip, como cualquier otro paquete de Python:

$ pip install peticiones

Esta biblioteca nos permite recuperar el contenido HTML de una página web en forma de cadena:

solicitudes de importación

url = 'https://www.w3schools.com/html/html_tables.asp'

html = requests.get(url).text

A continuación, utilizaremos la biblioteca BeautifulSoup para analizar el contenido HTML y extraer los datos de la tabla. BeautifulSoup proporciona una variedad de métodos y atributos que facilitan la navegación y la extracción de datos de un documento HTML. He aquí un ejemplo de cómo utilizarlo para encontrar el elemento de tabla y extraer los datos de las celdas:

soup = BeautifulSoup(html, 'html.parser')

# Encontrar el elemento tabla

table = soup.find('table')

# Extraer los datos de las celdas

data = []

for row in table.find_all('tr'):

cols = row.find_all('td')

# Extraer las cabeceras de la tabla

if len(cols) == 0:

cols = row.find_all('th')

cols = [ele.text.strip() for ele in cols]

data.append([ele for ele in cols if ele]) # Deshacerse de los valores vacíos

print(data)

El array de datos 2D se rellena ahora con los valores de las filas y columnas de la tabla. Para que sea más legible para nosotros podemos pasar el contenido a un Pandas Dataframe muy fácilmente ahora:

import pandas as pd

# Obtención de las cabeceras de la matriz de datos

# Es importante eliminarlas posteriormente de la matriz de datos para que Pandas las analice correctamente

headers = data.pop(0)

df = pd.DataFrame(data, columns=headers)

print(df)

Una vez extraídos los datos de la tabla, puedes utilizarlos para diversos fines, como el análisis de datos, el aprendizaje automático o su almacenamiento en una base de datos. También puedes modificar el código para extraer varias tablas de la misma página web o de varias páginas web.

Tenga en cuenta que no todos los sitios web de Internet son tan fáciles de raspar. Muchos de ellos han implementado medidas de protección de alto nivel diseñadas para evitar el scraping, como CAPTCHA y el bloqueo de las direcciones IP, pero por suerte existen servicios de terceros como WebScrapingAPI que ofrecen rotación de IP y omisión de CAPTCHA, lo que le permite scrapear esos objetivos.

Espero que esta sección haya proporcionado una visión general útil del proceso de raspado de datos de una tabla HTML utilizando Python. En la siguiente sección, discutiremos algunas de las formas en que puedes mejorar este proceso y las mejores prácticas de raspado web.

Cada vez más avanzado

Aunque el scraper que construimos en la sección anterior es funcional y puede extraer datos de una tabla HTML, hay varias formas de mejorarlo y optimizarlo para que sea más eficiente y eficaz. He aquí algunas sugerencias:

  • Gestión de la paginación: Si la tabla HTML que se está extrayendo está repartida en varias páginas, será necesario modificar el raspador para que gestione la paginación y extraiga los datos de todas las páginas. Esto puede hacerse siguiendo enlaces o utilizando un control de paginación, como un botón "siguiente", para navegar a la siguiente página de datos.
  • Manejo de AJAX: Si la tabla HTML se genera utilizando AJAX o JavaScript, es posible que necesite utilizar una herramienta como Selenium para ejecutar el JavaScript y cargar los datos en la tabla. Selenium es una biblioteca de pruebas web que puede simular a un usuario interactuando con una página web y le permite raspar datos que se generan dinámicamente. Una buena alternativa a esto es utilizar nuestro scraper que puede devolver los datos después de que JavaScript es renderizado en la página. Puedes aprender más sobre esto consultando nuestra documentación.
  • Gestión de errores: Es importante manejar los errores y las excepciones con elegancia en tu scraper, ya que los problemas de red o del servidor pueden hacer que las peticiones fallen o que los datos estén incompletos. Puedes utilizar bloques try/except para capturar excepciones y gestionarlas adecuadamente, como reintentar la solicitud o registrar el error.
  • Escalar el scraper: Si necesitas extraer una gran cantidad de datos de varias tablas o sitios web, es posible que tengas que escalar tu scraper para manejar el aumento de la carga de trabajo. Para ello se pueden utilizar técnicas como el procesamiento en paralelo o la distribución del trabajo entre varias máquinas.

Al mejorar y optimizar su raspador web, puede extraer datos de manera más eficiente y eficaz, y asegurarse de que su raspador es fiable y escalable. En la siguiente sección, analizaremos por qué utilizar un servicio de raspado profesional puede ser una mejor opción que crear su propio raspador.

Resumen

En este artículo, cubrimos los fundamentos del web scraping y le mostramos cómo construir un simple scraper Python para extraer datos de una tabla HTML. Aunque construir tu propio scraper puede ser un ejercicio útil y educativo, hay una serie de razones por las que utilizar un servicio profesional de scraping puede ser una mejor opción en muchos casos:

  • Los raspadores profesionales suelen ser más fiables y eficientes, ya que están diseñados y optimizados para el raspado web a escala.
  • Los raspadores profesionales suelen tener funciones y capacidades que no están disponibles en los raspadores caseros, como la compatibilidad con CAPTCHA, la limitación de tarifas y el manejo de AJAX y JavaScript.
  • Utilizar un rascador profesional puede ahorrarle tiempo y recursos, ya que no tiene que construir y mantener su propio rascador.
  • Los raspadores profesionales suelen ofrecer varias opciones de precios y pueden ser más rentables que crear su propio raspador, especialmente si necesita raspar grandes cantidades de datos.

Aunque construir su propio rascador puede ser una experiencia gratificante, en muchos casos puede resultar más práctico y rentable recurrir a un servicio profesional de rascadores. Al final, la decisión de construir su propio rascador o recurrir a un servicio profesional dependerá de sus necesidades y recursos específicos.

Espero que este artículo haya proporcionado una visión general útil de web scraping y el proceso de construcción de un simple raspador de tablas HTML con Python.

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

miniatura
GuíasCómo raspar datos de productos de Amazon: Guía completa de mejores prácticas y herramientas

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.

Suciu Dan
avatar de autor
Suciu Dan
15 minutos de lectura
miniatura
GuíasCómo construir un rascador y descargar un archivo con Puppeteer

Descubra 3 maneras de descargar archivos con Puppeteer y construya un raspador web que haga exactamente eso.

Mihnea-Octavian Manolache
avatar de autor
Mihnea-Octavian Manolache
8 min leer
miniatura
GuíasDescubra cómo raspar tablas JavaScript con Python

Aprende a scrapear tablas JavaScript usando Python. Extraer datos de sitios web, almacenarlos y manipularlos usando Pandas. Mejorar la eficiencia y fiabilidad del proceso de scraping.

Andrei Ogiolan
avatar de autor
Andrei Ogiolan
7 min leer