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 la fonctionnalité par défaut de ce module pour ajouter une logique de notre propre. Nous allons le faire en utilisant le Analyseur HTML classe en Python dans html.analyseur module. Voyons le code en action.
Regarder la classe HTMLParser
Pour analyser du texte HTML en Python, nous pouvons utiliser Analyseur HTML classe dans html.analyseur module. Regardons la définition de classe pour le Analyseur HTML classer:
classe html.analyseur.HTMLParser(*, convert_charrefs=True)le convertir_charrefs champ, s'il est défini sur True, toutes les références de caractères seront converties en leurs équivalents Unicode. Seulement le scénario/style les éléments ne sont pas convertis. Maintenant, nous allons essayer de comprendre chaque fonction pour cette classe ainsi pour mieux comprendre ce que fait chaque fonction.
- handle_startendtag C'est la première fonction qui est déclenchée lorsque la chaîne HTML est passée à 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éduit à d'autres balises dans la chaîne. Ceci est également clair dans la définition de cette fonction : def handle_startendtag(self, tag, attrs) :
soi.handle_starttag(balise, attributs)
soi.handle_endtag(balise) - handle_starttag: Cette méthode gère la balise de début pour les données qu'elle reçoit. Sa définition est la suivante : def handle_starttag(self, tag, attrs):
passe - handle_endtag: cette méthode gère la balise de fin pour les données qu'elle reçoit : def handle_endtag(self, balise):
passe - poignée_charref: Cette méthode gère les références de caractères dans les données qu'elle reçoit. Sa définition est la suivante : def handle_charref(self, name):
passe - handle_entityref: Cette fonction gère les références d'entité dans le code HTML qui lui est transmis : def handle_entityref(self, name):
passe - handle_data: C'est la fonction où le vrai travail est fait pour extraire les valeurs des balises HTML et passe les données liées à chaque balise. Sa définition est la suivante : def handle_data(self, data):
passe - handle_comment: En utilisant cette fonction, nous pouvons également obtenir des commentaires attachés à une source HTML : def handle_comment(self, data):
passe - poignée_pi: Comme HTML peut également avoir des instructions de traitement, c'est la fonction où ces Sa définition est comme indiqué ci-dessous : def handle_pi(self, data) :
passe - handle_decl: Cette méthode gère les déclarations dans le HTML, sa définition est fournie comme : def handle_decl(self, decl) :
passe
Sous-classer la classe HTMLParser
Dans cette section, nous allons sous-classer la classe HTMLParser et examinerons certaines des fonctions appelées lorsque les données HTML sont transmises à l'instance de classe. Écrivons un script simple qui fait tout cela :
du html.analyseur syntaxique importation HTMLParserclasse LinuxHTMLParser(HTMLParser):
def handle_starttag(self, tag, attrs):
print("Balise de début rencontrée :", balise)
def handle_endtag(self, tag):
print("Balise de fin rencontrée :", balise)
def handle_data(self, data):
print("Données trouvées :", données)
analyseur = LinuxHTMLParser()
analyseur.alimentation("
'
module d'analyse HTML Python
')
Voici ce que nous obtenons avec cette commande :
Sous-classe Python HTMLParser
Fonctions HTMLParser
Dans cette section, nous allons travailler avec diverses fonctions de la classe HTMLParser et examiner les fonctionnalités de chacune d'entre elles :
du html.analyseur syntaxique importation HTMLParserdu html.les entités importent name2codepoint
classe LinuxHint_Parse (HTMLParser) :
def handle_starttag(self, tag, attrs):
print("Balise de début :", balise)
pour attr dans attrs :
print(" attr:", attr)
def handle_endtag(self, tag):
print("Balise de fin :", balise)
def handle_data(self, data):
print("Données :", données)
def handle_comment(self, data):
print("Commentaire :", data)
def handle_entityref(self, name):
c = chr(nom2point de code[nom])
print("Ent nommé :", c)
def handle_charref(self, name):
si nom.commence par('x'):
c = chr(int(nom[1:], 16))
autre:
c = chr(int(nom))
print("Num ent :", c)
def handle_decl(self, data):
print("Decl :", data)
analyseur = LinuxHint_Parse()
Avec divers appels, alimentons cette instance en données HTML séparées et voyons quelle sortie ces appels génèrent. Nous allons commencer par un simple DOCTYPE chaîne:
analyseur.alimentation('')Voici ce que nous obtenons avec cet appel :
DOCTYPE Chaîne
Essayons maintenant une balise d'image et voyons quelles données elle extrait :
analyseur.alimentation('')Voici ce que nous obtenons avec cet appel :
Balise d'image HTMLParser
Essayons ensuite comment la balise de script se comporte avec les fonctions Python :
analyseur.alimentation('')analyseur.alimentation('')
analyseur.feed('#python couleur : vert ')
Voici ce que nous obtenons avec cet appel :
Balise de script dans l'analyseur html
Enfin, nous transmettons également des commentaires à la section HTMLParser :
analyseur.alimentation('''')
Voici ce que nous obtenons avec cet appel :
Commentaires d'analyse
Conclusion
Dans cette leçon, nous avons vu comment nous pouvons analyser HTML à l'aide de la propre classe HTMLParser de Python sans aucune autre bibliothèque. Nous pouvons facilement modifier le code pour changer la source des données HTML en un client HTTP.
Lisez plus de messages basés sur Python ici.