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.