CodeGym /Cursos /Python SELF ES /Recopilación de datos de tablas y listas

Recopilación de datos de tablas y listas

Python SELF ES
Nivel 32 , Lección 2
Disponible

1. Extracción de datos tabulares

¿Qué tienen en común las tablas y las cebollas? ¡Sí, sí, capas!

Las tablas en HTML representan una especie de equivalente a un pastel de capas, que consta de elementos <table>, <tr> (filas), <th> (celdas de encabezado) y <td> (celdas normales). Cada uno de estos elementos desempeña su papel en la representación de datos, y para extraer información de ellos, necesitamos llegar a cada capa secuencialmente.

¡Práctica, práctica y más práctica!

Empecemos con la siguiente tabla HTML simple:

HTML
<table>
  <tr>
    <th>Nombre</th>
    <th>Edad</th>
    <th>Ciudad</th>
  </tr>
  <tr>
    <td>Alicia</td>
    <td>29</td>
    <td>Moscú</td>
  </tr>
  <tr>
    <td>Bob</td>
    <td>34</td>
    <td>San Petersburgo</td>
  </tr>
</table>

Paso 1: Encontrar una tabla en la página

Las tablas en las páginas web se definen con etiquetas HTML <table>, y los datos dentro de las tablas se colocan dentro de etiquetas <tr> (filas de la tabla) y <td> (celdas de datos). En BeautifulSoup el método find ayuda a encontrar la primera tabla en la página, mientras find_all permite obtener todas las tablas si hay varias.

Python
# Encontrar la primera tabla en la página
table = soup.find("table")

Si necesitas extraer una tabla específica, puedes especificar la búsqueda incluyendo atributos de la tabla, como id o class.

Python

# Buscar una tabla por clase
table = soup.find("table", {"class": "table-class"})

Paso 2: Extracción de datos de la tabla

Una vez cargada, puedes proceder a extraer datos. Los datos en una tabla están organizados por filas, así que un paso lógico sería recorrer las filas de la tabla y extraer datos de cada celda.

Extracción de encabezados

Los encabezados de la tabla generalmente están en la primera fila y encapsulados en etiquetas <th>. El uso de find_all permite recopilar todos los encabezados en una lista.

Python
# Extraer encabezados de la primera fila de la tabla
headers = []
header_row = table.find("tr")
for th in header_row.find_all("th"):
headers.append(th.text.strip())

print("Encabezados de la tabla:", headers)

Extracción de filas de datos

Para extraer todas las filas de datos (generalmente encapsuladas en etiquetas <tr>, y cada celda en <td>) usamos un bucle anidado: primero encontramos todas las filas <tr>, y luego iteramos a través de las celdas <td> en cada fila.

Python

# Extracción de todas las filas de datos
data = []
rows = table.find_all("tr")[1:]  # Saltar la primera fila con encabezados

for row in rows:
row_data = []
for cell in row.find_all("td"):
row_data.append(cell.text.strip())
data.append(row_data)

print("Datos de la tabla:", data)

Este código recorre cuidadosamente las filas de la tabla y extrae el texto de cada celda. ¿No es un milagro? Por supuesto, todos sabemos que no hay milagros sin la magia de los bucles.

2. Trabajo con listas

Listas — los hermanos mayores de las tablas

En la vida hay solo dos objetos infinitos: tablas y listas. Las listas se representan con elementos <ul> (no numeradas) y <ol> (numeradas), y sus elementos son <li>. A diferencia de las tablas, las listas son simples y minimalistas. Esto las hace ideales para un procesamiento de datos rápido y eficiente.

Extracción de datos de listas

Mira un ejemplo de lista HTML:

HTML

<ul>
  <li>Manzana</li>
  <li>Plátano</li>
  <li>Uva</li>
</ul>

Ahora usamos nuestro viejo y querido BeautifulSoup, para extraer estos datos:

Python

html = """
<ul>
  <li>Manzana</li>
  <li>Plátano</li>
  <li>Uva</li>
</ul>
"""

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

ul = soup.find('ul')
items = ul.find_all('li')

for item in items:
    print(item.get_text())

¡Eso es todo! Un enfoque simple pero efectivo que puedes aplicar a estructuras más complejas.

3. Ejemplo de extracción y procesamiento de datos tabulares

Para consolidar el conocimiento, intentemos extraer datos de un ejemplo similar en la práctica, pero con una estructura más compleja:

HTML

<table id="cursos">
  <tr>
    <th>Curso</th>
    <th>Instructor</th>
  </tr>
  <tr>
    <td>Python para todos</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automatización con Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="tecnologías">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>

Para extraer datos de una tabla o una lista, podemos configurar las consultas de la siguiente manera:

Python

html = """
<table id="cursos">
  <tr>
    <th>Curso</th>
    <th>Instructor</th>
  </tr>
  <tr>
    <td>Python para todos</td>
    <td>Guido van Rossum</td>
  </tr>
  <tr>
    <td>Automatización con Python</td>
    <td>Eric Matthes</td>
  </tr>
</table>

<ul class="tecnologías">
  <li>Python</li>
  <li>JavaScript</li>
  <li>HTML & CSS</li>
</ul>
"""

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

# Extracción de datos de la tabla
course_table = soup.find('table', id='cursos')
course_rows = course_table.find_all('tr')

for row in course_rows:
    cells = row.find_all(['th', 'td'])
    for cell in cells:
        print(cell.get_text())

print("---")

# Extracción de datos de la lista
tech_list = soup.find('ul', class_='tecnologías')
tech_items = tech_list.find_all('li')

for item in tech_items:
    print(item.get_text())

Este script cubre ambos tipos de datos. Nota cómo usamos identificadores y clases para buscar elementos con precisión. En la práctica, podrías enfrentarte a estructuras HTML más complejas, pero el camino sigue siendo el mismo: comenzamos con el nivel superior, desglosamos los elementos y, finalmente, extraemos los datos valiosos.

4. Resumen parcial y errores comunes

Trabajar con tablas y listas en páginas web es como navegar en un laberinto. A veces podemos encontrarnos con datos imperfectos, como celdas vacías o elementos faltantes. En tales casos, es importante verificar que los datos sean correctos y completos. Los errores comunes pueden incluir intentar acceder a elementos que no existen o un uso incorrecto de selectores. Es importante recordar que el HTML puede no ser tan limpio y estructurado como nos gustaría, por lo que siempre debemos considerar el manejo de excepciones y la validación de los datos.

¿Dónde puede ser útil?

Los conocimientos obtenidos en esta lección te ayudarán a extraer y procesar automáticamente datos de múltiples fuentes en línea. Por ejemplo, puedes automatizar la recopilación de datos de tablas de bolsas de valores, configurar el monitoreo de precios en tiendas en línea e incluso realizar análisis periódicos de datos de blogs y sitios de noticias. El dominio de la técnica de extracción de datos de tablas y listas te abre un mundo de posibilidades para la automatización y el análisis de datos.

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION