Comment analyser le HTML avec RegEx ? [3 Desirable Practices]


L’analyse syntaxique HTML est un moyen populaire de extraire les données pertinentes à partir d’un site Web. Il existe de nombreuses techniques d’analyse HTML disponibles, chacune avec différents niveaux de complexité.

L’un d’eux passe par RegEx. C’est une séquence de caractères qui définit un modèle de recherche dans un texte donné.

Cet article couvre les étapes à suivre pour analyser HTML avec RegEx—y compris des exemples de codes et quelques bonnes pratiques que vous devez connaître.

Continuer à lire.

Analyse HTML avec RegEx

L’expression régulière (RegEx) est souvent utilisée pour rechercher, extraire ou remplacer des chaînes de texte spécifiques dans un corps de données plus important, comme HTML.

Cependant, il est plus puissant et hautement personnalisable. Vous trouverez ci-dessous un exemple de modèle RegEx pour sélectionner des balises et leur contenu en HTML :

<(\w+)\s*([^>]*)>(.*?)<\/\1>

Se familiariser avec la fonction de chaque séquence de caractères aidera à donner un sens à un modèle donné.

Voici la répartition :

<(\w+)\s*

  • Il contient le premier crochet (<) de la balise d’ouverture.
  • (\w+) correspond à un ou plusieurs caractères de mot dans le nom de la balise.
  • \s* correspond à zéro ou plusieurs espaces après le nom de la balise.

([^>]*)>

  • ([^>]*) correspond à zéro ou plusieurs caractères qui ne sont pas des chevrons fermants (>).
  • Le ^ le symbole fait exception.
  • * est un jeu de correspondance « gourmand » pour capturer les attributs et les valeurs.
  • La dernière équerre (>) ferme la balise d’ouverture.

(.* ?)

  • C’est une correspondance non gourmande qui capture le contenu de la balise.

<\/\1>

  • Cela correspond à la balise de fermeture en faisant référence au premier groupe de capture (\w+) par l’utilisation de \1.
  • Les symboles <\/ capturer littéralement de la balise fermante.
  • La dernière équerre (>) ferme la balise fermante.

RegEx peut varier en fonction du langage de programmation. Dans la section suivante, vous apprendrez à créer un Analyseur HTML avec RegEx à l’aide de scripts Python.

Comment utiliser RegEx pour analyser le HTML ?

RegEx peut être utilisé dans différents langages de programmation tels que JavaScript, C++ et C.

Python prend en charge RegEx nativement via le concernant bibliothèque, qui sera utilisée dans ce guide

???? Fait amusant: Sais-tu cela 2,1% des sites Web utilisent JavaScript comme langage de programmation côté serveur ? Pendant ce temps, moins de 0,1 % des sites utilisent C et C++.

Avant d’entrer dans le script Python proprement dit, essayez de vous habituer à quelques exemples de modèles RegEx.

Modèles RegEx de base pour l’analyse HTML

Il n’est pas nécessaire de tout mémoriser dans le processus. Vous pouvez utiliser les modèles RegEx de base ici pour analyser le contenu HTML.

Jetez un oeil à chacun.

Pour faire correspondre les valeurs d’attribut, vous pouvez utiliser :

<\w+\s+(\w+)=[\'"]([^\'"]*)[\'"]>

Pour extraire tous les commentaires HTML, utilisez :

Pour obtenir toutes les URL des ancres, vous pouvez exécuter :

Pour acquérir tous les e-mails dans un fichier HTML, entrez :

Il est maintenant temps de passer aux scripts suggérés en Python.

Configuration de l’analyseur HTML RegEx à l’aide de Python

Supposons que vous souhaitiez extraire toutes les URL des balises d’ancrage d’une page Web. La première partie du code consistera en l’importation de concernant et urllib.request bibliothèques.

Les deux sont natifs de Python, il n’est donc pas nécessaire de télécharger quoi que ce soit. Vous pouvez commencer par ceci :

importer concernant

importer urllib.request

Le prochain ensemble décodera la requête-réponse en UTF-8. C’est-à-dire:

définitivement get_anchor_urls(URL):

essayer:

réponse = urllib.request.urlopen(url)

contenu_html = réponse.read().decode(‘utf-8’)

Ensuite, la variable de modèle pour obtenir les URL des balises d’ancrage. Le re.findall() trouvera toutes les correspondances qui ne se chevauchent pas dans le contenu HTML demandé.

modèle = r[^>]*href=[\’]([^\’]*)[\’][^>]*>’

ancre_tags = re.findall(motif, contenu_html)

Il y aura un problème ici. Cela capturera également les URL des scripts.

Pour résoudre ce problème, un autre modèle doit être ajouté pour capturer les URL des balises de script et les filtrer.

script_pattern = r[^<]*(? :(?!<\/scénario>)<[^<]*)*<\/script>’

ancre_urls = [

            url for url in anchor_tags if not re.search(script_pattern, url)]

Voici le code permettant de renvoyer les URL d’ancrage ou les messages d’erreur si la requête échoue :

retour ancre_urls

sauf urllib.error.URLError comme e :

imprimer(‘Erreur lors de la récupération de la page Web :’e)

retour Aucun

Pour attribuer l’URL spécifique pour envoyer la demande, ajoutez :

page_web_url = ‘https://exemple.com/’

URL = get_anchor_urls(webpage_url)

Enfin, imprimez les résultats en utilisant :

si URL :

imprimer(‘URL d’ancrage :’)

pour URL dans URL :

imprimer(URL)

Tous ensemble, voici à quoi cela devrait ressembler :

importer concernant

importer urllib.request

définitivement get_anchor_urls(URL):

essayer:

réponse = urllib.request.urlopen(url)

contenu_html = réponse.read().decode(‘utf-8’) # Décodez la réponse en UTF-8

# Modèle Regex pour faire correspondre les balises d’ancrage et capturer les URL

modèle = r[^>]*href=[\’]([^\’]*)[\’][^>]*>’

# Exclure les URL des balises de script à l’aide d’une anticipation négative

script_pattern = r[^<]*(? :(?!<\/scénario>)<[^<]*)*<\/script>’

# Trouver toutes les balises d’ancrage dans le contenu HTML

ancre_tags = re.findall(motif, contenu_html)

# Filtrer les URL des balises de script

ancre_urls = [

            url for url in anchor_tags if not re.search(script_pattern, url)]

retour ancre_urls

sauf urllib.error.URLError comme e :

imprimer(‘Erreur lors de la récupération de la page Web :’e)

retour Aucun

# Exemple d’utilisation

page_web_url = ‘https://exemple.com/’

URL = get_anchor_urls(webpage_url)

si URL :

imprimer(‘URL d’ancrage :’)

pour URL dans URL :

imprimer(URL)

Après avoir entré les scripts, vous avez maintenant un Analyseur HTML RegEx que vous pouvez utiliser.

Vous pouvez également consulter outils d’analyse de données qui peut aider à automatiser le processus, vous permettant d’économiser du temps et des efforts pour créer votre propre analyseur.

Meilleures pratiques pour l’analyse HTML

Le processus ne se termine pas simplement par la configuration de votre propre analyseur. Il y a quelques autres choses dont vous devez vous souvenir lors de l’analyse du contenu HTML avec RegEx.

Ceux-ci sont:

1. Limitez l’utilisation de RegEx à de simples fichiers HTML

Bien que puissant, RegEx n’est pas entièrement conçu pour gérer toute la complexité du HTML.

Certains meilleurs navigateurs Web sont capables de rendre des scripts HTML “cassés”, et cela peut être un problème avec RegEx.

Quelques développeurs laissent intentionnellement leurs codes HTML « cassés » ou mal structurés. Cela rend difficile pour RegEx de faire correspondre les éléments pertinents.

Les balises imbriquées sont également très complexes à faire correspondre. La création de modèles RegEx spécifiques pour les faire correspondre peut prendre du temps en raison de la nécessité de nombreux essais et erreurs.

✅Conseil de pro: Lors de l’analyse de code HTML complexe, vous pouvez utiliser la bibliothèque BeautifulSoup Python. Une autre option est un Analyseur JavaScript HTML en utilisant Node.js avec Cheerio.

2. Utilisez un testeur en ligne RegEx

Avec les modèles RegEx, les essais et les erreurs ne doivent pas nécessairement provenir de l’exécution répétée du code. Il existe des testeurs pour les modèles RegEx en ligne, et ils sont gratuits.

Vous pouvez choisir entre RegExR ou RegEx101. Les deux outils vous permettent de tester les modèles RegEx par rapport à la saisie de texte pour les corriger ou les déboguer.

Ils vous permettent également de choisir un langage de programmation spécifique pour la compatibilité.

3. Respectez les CGU des sites et les fichiers robots.txt

Il s’agit d’une règle importante que vous devez toujours garder à l’esprit pour éviter tout problème juridique lors du grattage.

Un site Web Conditions d’utilisation peuvent inclure des spécifications concernant l’utilisation responsable des données sur leur plate-forme. Assurez-vous de vérifier les TOS de chaque site.

D’autre part, les fichiers robot.txt incluent toutes les données que le site Web ne permet pas de gratter. Vous pouvez obtenir des informations d’accès en ajoutant robot.txt à l’URL du site.

Par exemple:

https://www.exemple.com/robot.txt

Aller à l’encontre des règles établies dans robot.txt peut vraiment entraîner des problèmes juridiques, vous devez donc en être conscient.

Conclusion

RegEx n’est qu’un des moyens d’analyser le contenu HTML. Bien qu’il s’agisse d’une méthode puissante, elle peut encore échouer lorsqu’il s’agit de fichiers HTML complexes.

Suivre les étapes ci-dessus vous permet d’analyser n’importe quel matériel HTML. Cependant, si vous traitez avec du HTML complexe, essayez d’autres outils comme BeautifulSoup ou Node.js pour l’analyse HTML.

A LIRE :  Comment regarder Funimation n'importe où dans le monde ?