Analyser HTML à l'aide de Python

Analyser HTML à l'aide de Python
L'analyse HTML est l'une des tâches les plus courantes effectuées aujourd'hui pour collecter des informations sur les sites Web et l'extraire à diverses fins, comme pour établir les performances des prix d'un produit au fil du temps, les critiques d'un livre sur un site Web et bien plus encore. Il existe de nombreuses bibliothèques comme BeautifulSoup à Python qui résume tant de points douloureux dans l'analyse du HTML, mais il vaut la peine de savoir comment ces bibliothèques fonctionnent réellement sous cette couche d'abstraction.

Dans cette leçon, c'est ce que nous avons l'intention de faire. Nous découvrirons comment les valeurs de différentes balises HTML peuvent être extraites et également remplacer les fonctionnalités par défaut de ce module pour ajouter une logique. Nous ferons cela en utilisant le Htmlparser classe en python dans html.analyseur module. Voyons le code en action.

En regardant la classe htmlparser

Pour analyser le texte HTML en Python, nous pouvons utiliser Htmlparser classe html.analyseur module. Regardons la dfinition de classe pour le Htmlparser classe:

classe HTML.analyseur.Htmlparser (*, convert_charrefs = true)

Le convert_charrefs Le champ, si défini sur True, fera que toutes les références de caractère converties en leurs équivalents Unicode. Seulement le script / style Les éléments ne sont pas convertis. Maintenant, nous allons essayer de comprendre chaque fonction pour cette classe également pour mieux comprendre ce que fait chaque fonction.

  • handle_startendtag Ceci est la première fonction qui est déclenchée lorsque la chaîne HTML est transmise à l'instance de classe. Une fois que le texte atteint ici, le contrôle est passé à d'autres fonctions de la classe qui se rétrécit à d'autres balises de la chaîne. Ceci est également clair dans la définition de cette fonction:
    def handle_startendtag (self, tag, attrs):
    soi.handle_starttag (tag, attrs)
    soi.handle_endtag (tag)
  • handle_starttag: Cette méthode gère la balise de démarrage pour les données qu'il reçoit. Sa définition est comme indiqué ci-dessous:
    def handle_starttag (self, tag, attrs):
    passer
  • handle_endtag: Cette méthode gère la balise de fin des données qu'il reçoit:
    def handle_endtag (self, tag):
    passer
  • handle_charref: Cette méthode gère les références de caractère dans les données qu'il reçoit. Sa définition est comme indiqué ci-dessous:
    def handle_charref (self, nom):
    passer
  • handle_entityRef: Cette fonction gère les références d'entité dans le HTML qui lui est transmis:
    def handle_entityRef (self, nom):
    passer
  • handle_data: Ceci est la fonction où un travail réel est effectué pour extraire les valeurs des balises HTML et a transmis les données liées à chaque balise. Sa définition est comme indiqué ci-dessous:
    def handle_data (self, data):
    passer
  • handle_comment: En utilisant cette fonction, nous pouvons également obtenir des commentaires attachés à une source HTML:
    def handle_comment (self, data):
    passer
  • handle_pi: Comme HTML peut également avoir des instructions de traitement, c'est la fonction où elles sont sa définition comme indiqué ci-dessous:
    def handle_pi (self, data):
    passer
  • handle_decl: Cette méthode gère les déclarations dans le HTML, sa définition est fournie comme:
    def handle_decl (self ,cc):
    passer

Sous-classe la classe htmlparser

Dans cette section, nous allons sous-classe la classe HTMLParser et jetterons un coup d'œil à certaines des fonctions appelées lorsque les données HTML seront transmises à l'instance de classe. Écrivons un script simple qui fait tout cela:

de HTML.Parser Import htmlparser
classe LinuxhtmlParser (htmlparser):
def handle_starttag (self, tag, attrs):
print ("start tag rencontré:", balise)
def handle_endtag (self, tag):
print ("Tag de fin rencontré:", balise)
def handle_data (self, data):
Imprimer ("Données trouvées:", données)
parser = LinuxhtmlParser ()
analyseur.alimentation("
'

Module d'analyse HTML Python


')

Voici ce que nous récupérons avec cette commande:

Python htmlparser sous-classe

Fonctions HTMLParser

Dans cette section, nous travaillerons avec diverses fonctions de la classe HTMLParser et examinerons les fonctionnalités de chacun de ces éléments:

de HTML.Parser Import htmlparser
de HTML.entités Import Name2CodePoint
classe Linuxhint_parse (htmlparser):
def handle_starttag (self, tag, attrs):
print ("start tag:", balise)
pour att dans les attrs:
print ("att:", att)
def handle_endtag (self, tag):
imprimer ("Tag de fin:", balise)
def handle_data (self, data):
Imprimer ("Données:", données)
def handle_comment (self, data):
imprimer ("Commentaire:", données)
def handle_entityRef (self, nom):
c = chr (name2codepoint [name])
Print ("nommé ent:", c)
def handle_charref (self, nom):
Si le nom.startSwith ('x'):
c = chr (int (nom [1:], 16))
autre:
c = chr (int (name))
imprimer ("Num ent:", c)
def handle_decl (self, data):
imprimer ("Dec:", données)
parser = linuxhint_parse ()

Avec divers appels, fournissons des données HTML séparées à cette instance et voyons à quelle sortie ces appels génèrent. Nous commencerons par un simple Doctype chaîne:

analyseur.alimentation(''"http: // www.W3.org / tr / html4 / strict.dtd "> ')

Voici ce que nous récupérons avec cet appel:

Chaîne doctype

Essayons maintenant une balise d'image et voyons quelles données il extrait:

analyseur.alimentation('')

Voici ce que nous récupérons avec cet appel:

Tag d'image htmlparser

Ensuite, essayons comment la balise de script se comporte avec les fonctions Python:

analyseur.alimentation(''
'alerte("Linuxhint Python"); ')
analyseur.Feed ('# python couleur: vert')
analyseur.Feed ('# python couleur: vert')

Voici ce que nous récupérons avec cet appel:

Bag de script dans htmlparser

Enfin, nous transmettons également des commentaires à la section htmlparser:

analyseur.alimentation(''
«CONTENU SPÉCIFIQUE»)

Voici ce que nous récupérons avec cet appel:

Commentaires d'analyse

Conclusion

Dans cette leçon, nous avons examiné comment nous pouvons analyser HTML à l'aide de la classe HTMLParser Python propre sans aucune autre bibliothèque. Nous pouvons facilement modifier le code pour modifier la source des données HTML en un client HTTP.

Lire la suite de messages basés sur Python ici.