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

Descubre cómo extraer datos de una tabla HTML con Python

Descubre cómo extraer datos de una tabla HTML con Python

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 habitual en el web scraping es extraer datos de tablas HTML, que se pueden encontrar en diversos 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 fácil de manejar y analizar.

Al final de este artículo, tendrás las habilidades y los conocimientos necesarios para crear tu propio rastreador web capaz de extraer datos de tablas HTML y utilizarlos para diversos fines. Tanto si eres un científico de datos que busca recopilar datos para su próximo proyecto, como si eres un empresario que busca recopilar datos para un estudio de mercado, o un desarrollador que desea crear su propia herramienta de rastreo web, este artículo te proporcionará un recurso valioso para iniciarte en el rastreo de tablas HTML utilizando Python.

¿Qué son las tablas HTML?

Las tablas HTML son un tipo de elemento en HTML (Hypertext Markup Language) que se utiliza para representar datos tabulares en una página web. Una tabla HTML consta de filas y columnas de celdas, que pueden contener texto, imágenes u otros elementos HTML. Las tablas HTML se crean utilizando el elemento table y se estructuran mediante «<tr>» (fila de la tabla), «<td>» (celda de tabla), «<th>» (encabezado de tabla), «<caption>», «<col>», «<colgroup>», «<tbody>» (cuerpo de tabla), «<thead>» (cabecera de tabla) y «<tfoot>» (pie de tabla). Ahora repasemos cada uno de ellos con más detalle:

  • 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.
  • Elemento th (encabezado de tabla): Define una celda de encabezado en una tabla HTML. Las celdas de encabezado se muestran en negrita y centradas de forma predeterminada, y se utilizan para etiquetar las filas o columnas de la tabla.
  • Elemento caption: Define un título o leyenda para una tabla HTML. La leyenda suele mostrarse encima o debajo de la tabla.
  • Elementos col y colgroup: definen las propiedades de las columnas de una tabla HTML, como el ancho o la alineación.
  • Elementos tbody, thead y tfoot: definen las secciones del cuerpo, la cabecera y el pie de una tabla HTML, respectivamente. Estos elementos se pueden utilizar para agrupar filas y aplicar estilos o atributos a una sección específica de la tabla.

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

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 los ha analizado por nosotros. Para poder ver la estructura HTML, hay que ir un paso más allá y utilizar las herramientas de desarrollo. Para ello, haz clic con el botón derecho del ratón en la página, selecciona «Inspeccionar», haz clic en la herramienta «Seleccionar elemento» y, a continuación, haz clic en el elemento (en este caso, la tabla) del que deseas ver la estructura HTML. Tras seguir estos pasos, deberías ver algo como esto:

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

Configuración

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

A continuación, tendremos que instalar algunas bibliotecas que nos ayudarán a extraer datos de tablas HTML. Algunas de las bibliotecas más populares para el 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 sencillo en comparación con las demás. Beautiful Soup es una biblioteca que facilita el análisis de documentos HTML y XML, y resulta especialmente útil para extraer datos de páginas web. Aunque esto es suficiente para extraer los datos HTML que buscamos, el formato HTML no resulta demasiado legible para el ojo humano, por lo que es posible que quieras procesar los datos de alguna manera. Aquí es donde entra en juego la biblioteca Pandas.

Pandas es una biblioteca de análisis de datos que proporciona herramientas para trabajar con datos estructurados, como las tablas HTML. Puedes instalar estas bibliotecas utilizando el gestor de paquetes pip, que viene incluido con Python:

$ pip install beautifulsoup4 pandas

Una vez que tengas Python y las bibliotecas necesarias instaladas, estarás listo para empezar a extraer datos de tablas HTML. En la siguiente sección, repasaremos los pasos para crear un rastreador web capaz de extraer datos de una tabla HTML y almacenarlos en un formato estructurado.

Empecemos a extraer datos

Ahora que tenemos nuestro entorno configurado y contamos con una comprensión básica de las tablas HTML, podemos empezar a crear un rastreador web para extraer datos de una tabla HTML. En esta sección, veremos los pasos para crear un rastreador sencillo capaz de extraer datos de una tabla y almacenarlos en un formato estructurado.

El primer paso es utilizar la biblioteca requests para enviar una solicitud HTTP a la página web que contiene la tabla HTML que queremos extraer.

Puedes instalarla con pip, como cualquier otro paquete de Python:

$ pip install requests

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

import requests

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 ofrece una variedad de métodos y atributos que facilitan la navegación y la extracción de datos de un documento HTML. A continuación se muestra un ejemplo de cómo utilizarla para encontrar el elemento de tabla y extraer los datos de las celdas:

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

# Find the table element

table = soup.find('table')

# Extract the data from the cells

data = []

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

   cols = row.find_all('td')

   # Extracting the table headers

   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])  # Get rid of empty values

print(data)


La matriz de datos 2D ya está llena con los valores de las filas y columnas de la tabla. Para que nos resulte más legible, ahora podemos pasar el contenido a un DataFrame de Pandas muy fácilmente:

import pandas as pd

# Getting the headers from the data array

# It is important to remove them from the data array afterwards in order to be parsed correctly by Pandas

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 el almacenamiento en una base de datos. También puedes modificar el código para extraer datos de varias tablas de la misma página web o de varias páginas web.

Ten en cuenta que no es tan fácil extraer datos de todos los sitios web de Internet. Muchos de ellos han implementado medidas de protección de alto nivel diseñadas para impedir el scraping, como CAPTCHA y el bloqueo de direcciones IP, pero, afortunadamente, existen servicios de terceros, como WebScrapingAPI, que ofrecen rotación de IP y eludir CAPTCHA, lo que te permite extraer datos de esos objetivos.

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

Avanzando un poco más

Aunque el scraper que hemos creado 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. Aquí tienes algunas sugerencias:

  • Gestión de la paginación: Si la tabla HTML que estás extrayendo se extiende a lo largo de varias páginas, tendrás que modificar el extractor para gestionar la paginación y extraer datos de todas las páginas. Esto suele hacerse siguiendo enlaces o utilizando un control de paginación, como un botón «Siguiente», para navegar a la página siguiente de datos.
  • Gestión de AJAX: Si la tabla HTML se genera mediante AJAX o JavaScript, es posible que tengas que 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 la interacción de un usuario con una página web y te permite extraer datos generados dinámicamente. Una buena alternativa a esto es utilizar nuestro extractor, que puede devolver los datos una vez que se ha renderizado el JavaScript en la página. Puedes obtener más información al respecto consultando nuestra documentación.
  • Gestión de errores: Es importante gestionar los errores y las excepciones de forma adecuada en tu extractor, ya que los problemas de red o del servidor pueden provocar que las solicitudes fallen o que los datos estén incompletos. Puedes utilizar bloques try/except para detectar excepciones y gestionarlas adecuadamente, por ejemplo, reintentando la solicitud o registrando el error.
  • Escalado del scraper: Si necesitas extraer una gran cantidad de datos de múltiples tablas o sitios web, es posible que tengas que escalar tu scraper para gestionar el aumento de la carga de trabajo. Esto se puede hacer utilizando técnicas como el procesamiento paralelo o la distribución del trabajo entre varias máquinas.

Al mejorar y optimizar su rastreador web, podrá extraer datos de forma más eficiente y eficaz, y garantizar que su rastreador sea fiable y escalable. En la siguiente sección, analizaremos por qué utilizar un servicio de rastreo profesional puede ser una mejor opción que crear su propio rastreador.

Resumen

En este artículo, hemos cubierto los fundamentos del web scraping y te hemos mostrado cómo crear un sencillo scraper en Python para extraer datos de una tabla HTML. Aunque crear tu propio scraper puede ser un ejercicio útil y educativo, hay varias razones por las que utilizar un servicio de scraper profesional puede ser una mejor opción en muchos casos:

  • Los scrapers profesionales suelen ser más fiables y eficientes, ya que están diseñados y optimizados para el web scraping a gran escala.
  • Los scrapers profesionales suelen tener características y capacidades que no están disponibles en los scrapers caseros, como la compatibilidad con CAPTCHAs, la limitación de velocidad y el manejo de AJAX y JavaScript.
  • Utilizar un scraper profesional puede ahorrarte tiempo y recursos, ya que no tienes que crear y mantener tu propio scraper.
  • Los rastreadores profesionales suelen ofrecer diversas opciones de precios y pueden resultar más rentables que crear tu propio rastreador, especialmente si necesitas extraer grandes cantidades de datos.

Aunque crear tu propio scraper puede ser una experiencia gratificante, en muchos casos puede resultar más práctico y rentable utilizar un servicio de scraper profesional. Al final, la decisión de crear tu propio scraper o utilizar un servicio profesional dependerá de tus necesidades y recursos específicos.

Espero que este artículo te haya proporcionado una visión general útil sobre el web scraping y el proceso de creación de un sencillo scraper de tablas HTML con Python.

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.