Fonction Pandas pd.read_html()

Python math 模块Fonctions courantes de Pandas


read_html()C'est une fonction de la bibliothèque pandas utilisée pour analyser des tableaux HTML, qui peut lire les données tabulaires à partir de pages web ou de fichiers HTML et les convertir en un DataFrame.

Les données tabulaires dans les pages web sont une source de données très importante. De nombreux jeux de données publics (comme les informations boursières, les données statistiques, etc.) sont présentés sous forme de tableaux HTML.read_html()UtilisationlxmletBeautifulSoupla bibliothèque pour analyser le HTML, elle peut automatiquement extraire tous les tableaux ou les tableaux spécifiés de la page.


Syntaxe de base et paramètres

Format de syntaxe

pandas.read_html(io, match='.+', flavor=None, header=None, index_col=None,
                skiprows=None, attrs=None, parse_dates=False, thousands=',',
                decimal='.', converters=None, ...)

Description du paramètre

ParamètreTypeDescriptionValeur par défaut
iostr, objet chemin, objet de type fichierchemin de fichier HTML, URL ou chaîneRequis
correspondancestr, regexUtiliser des expressions régulières pour correspondre au contenu textuel du tableau'.+'
flavorstrAnalyseur : 'lxml', 'html5lib', 'bs4'Aucune
headerint, liste d'intNuméro de ligne utilisé comme noms de colonnesAucune
index_colint, strColonne utilisée comme index de ligneAucune
skiprowsint, list, sliceIgnorer les lignes spécifiéesAucune
attrsdictAttributs de balise HTML utilisés pour filtrer les tableauxAucune
parse_datesbool, listIndique s'il faut analyser les colonnes de datesFalse

Valeur de retour

  • Type de retour:list de DataFrames
  • Renvoie une liste de DataFrames ; le nombre de DataFrames renvoyés correspond au nombre de tableaux de la page.
  • Si aucun tableau correspondant n'est trouvé, renvoie une liste vide.

Exemples

À travers les exemples suivants, maîtrisez de manière exhaustiveread_html()les différentes utilisations.

Exemple 1 : Lire un tableau à partir d'un fichier HTML local

Créez d'abord un fichier HTML contenant un tableau, puis utilisezread_html()pour le lire.

Exemple

import pandas as pd

# Créer un fichier HTML contenant un tableau
html_content = '''



<title>Tableau d'informations sur les employés</title>


<h1>Fonction Pandas pd-read-html()</h1>
    <table border="1" class="employee-table">
        <tr>
<th>Nom</th>
<th>Âge</th>
<th>Città</th>
<th>Salaire</th>
        </tr>
        <tr>
            <td>Tom</td>
            <td>28</td>
            <td>Pékin</td>
            <td>8000</td>
        </tr>
        <tr>
            <td>Jerry</td>
            <td>35</td>
            <td>Shanghai</td>
            <td>12000</td>
        </tr>
        <tr>
            <td>Mike</td>
            <td>42</td>
            <td>Canton</td>
            <td>15000</td>
        </tr>
        <tr>
            <td>Lucy</td>
            <td>26</td>
            <td>Shenzhen</td>
            <td>7000</td>
        </tr>
    </table>

<h2>Liste des départements</h2>
    <table border="1">
        <tr>
<th>Département</th>
<th>Effectif</th>
        </tr>
        <tr>
<td>Département Technologie</td>
            <td>50</td>
        </tr>
        <tr>
<td>Département des ventes</td>
            <td>30</td>
        </tr>
    </table>


'''


# Écrire le HTML dans un fichier
with open('tables.html', 'w', encoding='utf-8') as f:
    f.write(html_content)

# Utiliser read_html pour lire tous les tableaux
# io : chemin du fichier HTML (obligatoire)
tables = pd.read_html('tables.html')

# Afficher les résultats de lecture
print(f"{len(tables)} tableaux trouvés")
print()

# Parcourir tous les tableaux
for i, df in enumerate(tables):
    print(f"--- Table {i+1} ---")
    print(df)
    print()

Sortie attendue :

共找到 2 个表格

--- 表格 1 ---
    姓名  年龄       城市    薪资
0   Tom   28    Beijing   8000
1  Jerry   35   Shanghai  12000
2   Mike   42  Guangzhou  15000
3   Lucy   26  Shenzhen   7000

--- 表格 2 ---
    部门  人数
0  技术部   50
1  销售部   30

Explication du code :

  • read_html()Renvoie une liste de DataFrames, chaque tableau correspondant à un DataFrame.
  • Par défaut, tous les tableaux sont lus.
  • La première ligne est automatiquement reconnue comme les noms de colonnes (car il y a desthbalises).

Exemple 2 : Filtrer les tableaux en utilisant attrs et match

Lorsqu'une page contient plusieurs tableaux, vous pouvez utiliser la correspondance d'attributs ou de texte pour filtrer les tableaux souhaités.

Exemple

import pandas as pd

# Créer un fichier HTML avec des attributs
html_with_attrs = '''



    <table id="employees" class="data-table">
        <tr><th>nom</th><th>âge</th></tr>
        <tr><td>Tom</td><td>28</td></tr>
        <tr><td>Jerry</td><td>35</td></tr>
    </table>

    <table id="products" class="data-table">
        <tr><th>produit</th><th>prix</th></tr>
        <tr><td>A</td><td>100</td></tr>
        <tr><td>B</td><td>200</td></tr>
    </table>

    <table class="summary">
        <tr><td>Total</td><td>2</td></tr>
    </table>


'''


with open('tables_attrs.html', 'w', encoding='utf-8') as f:
    f.write(html_with_attrs)

# Exemple 2a : Utiliser attrs pour filtrer par attribut id
# Lire la table avec id="employees"
tables_by_id = pd.read_html('tables_attrs.html', attrs={'id': 'employees'})
print("Utilisation de l'id pour filtrer :")
print(tables_by_id[0])
print()

# Exemple 2b : Utiliser attrs pour filtrer par attribut class
# Lire toutes les tables avec class="data-table"
tables_by_class = pd.read_html('tables_attrs.html', attrs={'class': 'data-table'})
print("Utilisation de la classe pour filtrer ({} tableaux trouvés) :".format(len(tables_by_class)))
for i, df in enumerate(tables_by_class):
    print(f"Tableau {i+1} :")
    print(df)
    print()

# Exemple 2c : Utiliser match pour filtrer les tableaux contenant un texte spécifique
# match utilise des expressions régulières pour faire correspondre le texte dans les tableaux
tables_by_text = pd.read_html('tables_attrs.html', match='Tom')
print("Tableaux contenant le texte 'Tom' :")
print(tables_by_text[0])

Sortie attendue :

使用 id 筛选:
   name  age
0   Tom   28
1  Jerry   35

使用 class 筛选 (找到 2 个表格):
表格 1:
   name  age
0   Tom   28
1  Jerry   35

表格 2:
  product  price
0       A    100
1       B    200

包含 'Tom' 文本的表格:
   name  age
0   Tom   28
1  Jerry   35

Explication du code :

  • attrsLe paramètre peut spécifier des attributs de balise HTML (tels que id, class, style, etc.) pour filtrer les tableaux.
  • matchLe paramètre utilise des expressions régulières pour faire correspondre le contenu textuel du tableau, renvoyant les tableaux qui contiennent le texte correspondant.
  • Lorsqu'un seul tableau est retourné, vous pouvez utilisertables[0]pour obtenir le premier DataFrame.

Exemple 3: Gérer les en-têtes et les index

Les tableaux HTML peuvent avoir des formats complexes, donc les en-têtes et les index doivent être gérés de manière flexible.

h2 class="example">Exemple
import pandas as pd

# Créer du HTML avec une structure complexe
html_complex = '''



<!-- Table sans en-tête -->
    <table id="no_header">
        <tr><td>Tom</td><td>28</td></tr>
        <tr><td>Jerry</td><td>35</td></tr>
    </table>

<!-- En-tête multiligne -->
    <table id="multi_header">
<tr><th>Nom</th><th colspan="2">Informations de contact</th></tr>
<tr><th></th><th>Téléphone</th><th>E-mail</th></tr>
        <tr><td>Tom</td><td>123456</td><td>[email protected]</td></tr>
        <tr><td>Jerry</td><td>789012</td><td>[email protected]</td></tr>
    </table>

<!-- Tableau avec attributs -->
    <table id="with_index" data-type="employee">
<tr><th>Nom</th><th>Âge</th><th>Ville</th></tr>
        <tr><th></th><th></th><th></th></tr>
        <tr><td>Tom</td><td>28</td><td>Pékin</td></tr>
    </table>


'''


with open('tables_complex.html', 'w', encoding='utf-8') as f:
    f.write(html_complex)

# Exemple 3a : Cas sans en-tête
# header=None n'utilise pas la première ligne comme noms de colonnes
df_no_header = pd.read_html('tables_complex.html', attrs={'id': 'no_header'}, header=None)[0]
print("Aucun en-tête :")
print(df_no_header)
print()

# Exemple 3b : En-tête multiligne
# Utiliser la ligne 0 et la ligne 1 ensemble comme en-tête
df_multi_header = pd.read_html('tables_complex.html', attrs={'id': 'multi_header'})[0]
print("En-tête multiligne :")
print(df_multi_header)
print()

# Exemple 3c : Définir la colonne d'index
# index_col spécifie la colonne 0 comme index
df_with_index = pd.read_html('tables_complex.html', attrs={'id': 'with_index'}, index_col=0)[0]
print("Définition de l'index :")
print(df_with_index)

Sortie attendue :

没有表头:
      0     1
0  Tom    28
1  Jerry  35

多行表头:
       姓名    联系方式
        NaN    电话          邮箱
0     Tom  123456  [email protected]
1   Jerry  789012  [email protected]

设置索引:
                年龄       城市
姓名
Tom            28    Beijing
</空行>
空字符串    NaN       NaN
Tom            28    Beijing

Explication du code :

  • header=NoneVous pouvez désactiver la reconnaissance automatique des en-têtes et utiliser l'index entier par défaut comme noms de colonnes.
  • Les en-têtes multilignes sont traités comme un MultiIndex.
  • index_colLe paramètre peut spécifier une colonne à utiliser comme index de ligne.

Notes

  • Utilisationread_html()nécessite l'installation delxmlla bibliothèque :pip install lxml。
  • Il renvoie une liste de DataFrames ; vous devez sélectionner un tableau spécifique en fonction de l'index.
  • Lorsqu'il y a plusieurs tableaux sur la page, utilisezattrsoumatchle paramètre pour filtrer.
  • read_html()Il tentera d'analyser tous les tableaux, ce qui peut être lent. Pour les pages volumineuses, vous pouvez utilisermatchle paramètre pour restreindre la portée.
  • La lecture de pages web nécessite un support réseau, et il peut exister des restrictions d'accès ou des mécanismes anti-crawling.

Résumé

read_html()C'est un outil puissant dans pandas pour lire les données de tableaux HTML. Il peut analyser automatiquement les tableaux des pages web et les convertir en un format DataFrame structuré.

Dans le travail pratique, si vous devez obtenir des données à partir de pages web,read_html()c'est un choix très pratique. Maîtriser l'utilisation des paramètres attrs et match vous permet d'extraire efficacement les données requises à partir de pages complexes. Il est recommandé aux lecteurs de donner la priorité à cette fonction lorsqu'ils ont besoin d'extraire des tableaux web.

Python math 模块Fonctions courantes de Pandas

Autres extensions