Leer tabla HTML en un marco de datos de Pandas

Fariba Laiq 15 febrero 2024
  1. Utilice el método read_html() para leer tablas HTML en un marco de datos de Pandas
  2. Utilice el método read_html() para leer una tabla HTML desde una URL
  3. Utilice el método read_html() para leer una tabla HTML desde una cadena
  4. Utilice el método read_html() para leer una tabla HTML desde un archivo
Leer tabla HTML en un marco de datos de Pandas

Este tutorial demostrará cómo leer tablas HTML desde una URL, cadena o archivo y convertirlas en un marco de datos de Pandas en Python. El read_html() es un método rápido y práctico de la biblioteca de Pandas, que se utiliza para raspar tablas HTML en un marco de datos de Pandas.

Utilice el método read_html() para leer tablas HTML en un marco de datos de Pandas

El método read_html() toma la URL del sitio web, la cadena HTML o el archivo de texto HTML como argumento. Extrae todas las tablas y las devuelve en forma de una lista de marcos de datos porque un sitio web, una cadena o un archivo pueden contener varias tablas.

Si no existe ninguna tabla, el código da un ValueError: No se encontraron tablas.

Instalar lxml en Python

lxml es una biblioteca en Python que se utiliza para extraer, manejar y procesar datos HTML y XML. Antes de usar el método read_html(), tenemos que instalar lxml usando el siguiente comando y reiniciar el kernel si estamos usando Jupyter Notebook.

#Python 3.x
pip install lxml

Utilice el método read_html() para leer una tabla HTML desde una URL

Pasaremos la URL del sitio web como argumento en el método read_html() para leer todas las tablas y almacenarlas en el dataframe de Pandas. Podemos usar el método len() con el marco de datos para contar el número de tablas devueltas.

Aquí, obtenemos una lista de dos tablas. Si queremos acceder a la primera tabla, accederemos a ella a través de su índice 0 en la lista.

Código de ejemplo:

# Python 3.x
import pandas as pd

tables = pd.read_html("https://www.w3schools.com/html/html_tables.asp")
print("No of tables returned:", len(tables))
display(tables[0])

Producción:

Pandas lee HTML desde URL - Salida

Utilice el método read_html() para leer una tabla HTML desde una cadena

En el siguiente código, tenemos una tabla HTML en forma de cadena almacenada en la variable tabla. Para convertir la tabla en un marco de datos de Pandas, llamaremos al método read_html() y pasaremos la cadena HTML como argumento.

Solo hay una tabla en la cadena HTML, por lo que la longitud de la lista de tramas de datos es 1. Mostraremos la tabla accediendo a ella mediante su índice.

Código de ejemplo:

# Python 3.x
import pandas as pd

table = """<table>
    <thead>
        <tr>
            <th>Name</th>
            <th>Department</th>
            <th>Marks</th>
            <th>Age</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Robert</td>
            <td>CS</td>
            <td>60</td>
            <td>20</td>
        </tr>
        <tr>
            <td>Sam</td>
            <td>SE</td>
            <td>81</td>
            <td>21</td>
        </tr>
        <tr>
            <td>Alia</td>
            <td>SE</td>
            <td>79</td>
            <td>20</td>
        </tr>
    </tbody>
</table>"""
df_table = pd.read_html(table)
display(df_table[0])

Producción:

Pandas lee HTML de una cadena - Salida

Utilice el método read_html() para leer una tabla HTML desde un archivo

Leeremos la tabla HTML almacenada en un archivo de texto en un marco de datos de Pandas a través del manejo de archivos. Primero, colocamos el archivo de texto que contiene la tabla en el directorio actual.

O, si estamos usando un cuaderno Jupyter, debemos cargar el archivo de texto en el directorio de inicio. Luego leeremos el archivo de texto a través de open() y pasaremos el nombre de archivo y r como modo porque leeremos un archivo.

Extraeremos el contenido del archivo en el dataframe de Pandas a través del método read().

Código de ejemplo:

# Python 3.x
import pandas as pd

table_path = "table.txt"
with open(table_path, "r") as f:
    df_table = pd.read_html(f.read())
display(df_table[0])

Producción:

Pandas lee HTML desde archivo - Salida

Fariba Laiq avatar Fariba Laiq avatar

I am Fariba Laiq from Pakistan. An android app developer, technical content writer, and coding instructor. Writing has always been one of my passions. I love to learn, implement and convey my knowledge to others.

LinkedIn

Artículo relacionado - Pandas DataFrame