IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Réseau/Web Python Discussion :

récupérer des données dans un html


Sujet :

Réseau/Web Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    particulier
    Inscrit en
    Mai 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Mai 2020
    Messages : 17
    Par défaut récupérer des données dans un html
    bonjour,

    je suis très novice et je souhaite récupérer des données sur la page web de mes onduleurs photovoltaiques. Pas besoin de se connecter, c'est en local : source.txt

    j'ai essayé avec beautifulsoup et des tutos mais je bloque. je n'arrive ni a trouver de points communs aux valeurs a extraire et encore moins la synthaxe ......

    il me faudrait récupérer au moins les 6 indications en W (puis, date, heure, etc par la suite) que l'on peut repérer après les numéros d'onduleur suivant :
    408000137815-1
    408000137815-2
    408000139665-1
    408000139665-2
    408000140762-1
    408000140762-2

    si quelqu'un pouvait m'aider, ce serait sympa !!!

    merci d'avance

  2. #2
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    J'ai beaucoup utilisé Beautifulsoup dans le passé pour parser les pages du site de Arte TV jusqu'au jour où j'ai décidé de m'attaquer eu problème de lenteur de cette librairie.

    Et j'ai découvert, avec émerveillement, html.parser, très simple à utiliser et d'une rapidité décoiffante.

    Un exemple avec ton fichier que j'ai renommé en html
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
     
    from html.parser import HTMLParser
     
    FILE = "source.html"
     
    class ParseOnduleur(HTMLParser):
        def __init__(self):
            super().__init__(convert_charrefs=True)
            self.onduleurs = []
            self.current = []
            self.in_body = False
            self.in_item = False
            self.in_data = False
     
        def handle_starttag(self, tag, attrs):
            if tag == "body":
                self.in_body = True
     
            elif self.in_body and tag == "tr":
                self.in_item = True
                self.current = []
     
            elif self.in_item and tag == "td":
                self.in_data = True
     
        def handle_endtag(self, tag):
            if tag == "body":
                self.in_body = False
     
            if self.in_item and tag == "tr":
                if self.current:
                    self.onduleurs.append(self.current)
     
                self.in_item = False
     
        def handle_data(self, data):
            if self.in_data:
                self.current.append(data)
                self.in_data = False
     
     
    if __name__ == "__main__":
        with open(FILE, "r") as inf:
            data = inf.read()
     
        parser = ParseOnduleur()
        parser.feed(data)
        for i in parser.onduleurs:
            print(i)
    et ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    ['408000137815-1 ', ' 16 W ', ' 50.0 Hz ', ' 233 V ', ' 20 °C ', ' 2021-07-12 18:17:22\n ']
    ['408000137815-2 ', ' 16 W ', ' 233 V ']
    ['408000139665-1 ', ' 16 W ', ' 50.0 Hz ', ' 233 V ', ' 21 °C ', ' 2021-07-12 18:17:22\n ']
    ['408000139665-2 ', ' 16 W ', ' 233 V ']
    ['408000140762-1 ', ' 15 W ', ' 50.0 Hz ', ' 233 V ', ' 22 °C ', ' 2021-07-12 18:17:22\n ']
    ['408000140762-2 ', ' 16 W ', ' 233 V ']

  3. #3
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 248
    Par défaut
    hello,
    VinsS le souci avec le tableau qui est contenu dans le fichier html de bornich2, c'est qu'il contient des cellules fusionnées si bien que cela fausse ton extraction de données :

    Nom : TableauBornich2.PNG
Affichages : 272
Taille : 16,1 Ko

    avec le module pandas et sa fonction read_html, on peut lire des tableaux qui se trouvent dans des fichiers html, par exemple avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import pandas as pd
    pd.set_option('display.max_rows', 6)
    pd.set_option('display.max_columns', 6)
    pd.set_option('display.width', 120)
    html_tables = pd.read_html(r'd:\temp\source.html')
    df = html_tables[0]
    df.T # transpose to align
    print(df)
    voici ce que j'obtiens :
    Nom : ParsingResult.PNG
Affichages : 192
Taille : 11,1 Ko

    A noter que le read_html utilise le module lxml qui a un parser avec des performances acceptables.
    Voici une comparaison de performance entre différents parser html dans différents langages :

    Nom : BenchmarkHtmlParser.png
Affichages : 212
Taille : 57,2 Ko

    Ami calmant, J.P

  4. #4
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    hello,
    VinsS le souci avec le tableau qui est contenu dans le fichier html de bornich2, c'est qu'il contient des cellules fusionnées si bien que cela fausse ton extraction de données :

    Nom : TableauBornich2.PNG
Affichages : 272
Taille : 16,1 Ko
    Tu es parvenu à l'afficher, moi firefox m'a retourné une page blanche.

    Mais bon, les données sont faciles à interpréter surtout que bornich2 en connaît déjà le contenu.

  5. #5
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 248
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 248
    Par défaut
    Citation Envoyé par VinsS Voir le message
    Tu es parvenu à l'afficher, moi firefox m'a retourné une page blanche.
    j'ai rusé : Moi aussi cela ne m'affichait rien: Pour l'afficher , je n'ai gardé que la partie table du html.

  6. #6
    Membre averti
    Homme Profil pro
    particulier
    Inscrit en
    Mai 2020
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : particulier

    Informations forums :
    Inscription : Mai 2020
    Messages : 17
    Par défaut
    Citation Envoyé par jurassic pork Voir le message
    j'ai rusé : Moi aussi cela ne m'affichait rien: Pour l'afficher , je n'ai gardé que la partie table du html.
    bonjour,

    la méthode pandas me plait bien car il y a moins de lignes de code auxquelles je ne comprend pas un traitre mot. J'ai donc déjà réussis a installer pandas sur python3, le début du script ne plante donc pas.

    par contre, plutôt que dans un fichier, il me faut fouiner dans la page a l'adresse http://192.168.3.131/index.php/realtimedata comment insérer ca dans le code ?


    quant au résultat, peut on mettre chaque valeur dans une variable ? En fait, ce script va tourner sous Jeedom (domotique) et je dois récupérer ces données pour lancer des actions ou non.........

Discussions similaires

  1. [XL-2016] Récupérer des données dans des fichiers HTML et alimenter un fichier Excel.
    Par patinator3182 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/05/2019, 16h40
  2. [RegEx] Récupérer des données dans une page Web
    Par Pragmateek dans le forum Langage
    Réponses: 8
    Dernier message: 24/05/2006, 19h44
  3. Réponses: 2
    Dernier message: 16/01/2006, 19h34
  4. Récupérer des données dans une page HTML
    Par newdelirium dans le forum Langage
    Réponses: 3
    Dernier message: 26/10/2005, 19h18
  5. Récupérer des données dans excel
    Par alexia2 dans le forum MFC
    Réponses: 1
    Dernier message: 19/05/2005, 15h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo