Je veux une expression régulière pour extraire le titre d'une page HTML. Actuellement, j'ai ceci:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
Existe-t-il une expression régulière pour extraire uniquement le contenu de <title> pour ne pas avoir à supprimer les balises?
Réponses:
Utilisez
(
)
en regexp etgroup(1)
en python pour récupérer la chaîne capturée (re.search
retourneraNone
s'il ne trouve pas le résultat, donc ne l'utilisez pasgroup()
directement ):la source
import re
sinon vous obtiendrezNameError: name 're' is not defined
Notez que le démarrage
Python 3.8
et l'introduction d' expressions d'assignation (PEP 572) (:=
opérateur), il est possible d'améliorer un peu la solution de Krzysztof Krasoń en capturant le résultat de la correspondance directement dans la condition if en tant que variable et de le réutiliser dans le corps de la condition :la source
Essayez d'utiliser des groupes de capture:
la source
la source
Puis-je vous recommander de Beautiful Soup. Soup est une très bonne bibliothèque pour analyser tout votre document html.
la source
Essayer:
la source
.*?
au cas où il y en aurait plusieurs</title>
dans le document (peu probable mais on ne sait jamais).Les morceaux de code fournis ne sont pas compatibles avec
Exceptions
Je suggèreCela renvoie une chaîne vide par défaut si le modèle n'a pas été trouvé, ou la première correspondance.
la source
Je pense que cela devrait suffire:
... en supposant que votre texte (HTML) est dans une variable nommée "texte".
Cela suppose également qu'il n'y a pas d'autres balises HTML qui peuvent être légalement incorporées à l'intérieur d'une balise HTML TITLE et aucun moyen d'incorporer légalement un autre caractère <dans un tel conteneur / bloc.
Cependant ...
N'utilisez pas d'expressions régulières pour l'analyse HTML en Python. Utilisez un analyseur HTML! (À moins que vous n'écriviez un analyseur complet, ce qui serait un travail supplémentaire lorsque divers analyseurs HTML, SGML et XML sont déjà dans les bibliothèques standard.
Si votre manipulation de balises HTML "dans le monde réel" (qui est souvent non conforme à tout validateur SGML / XML), utilisez le package BeautifulSoup . Il n'est pas (encore) dans les bibliothèques standard mais est largement recommandé à cet effet.
Une autre option est: lxml ... qui est écrit pour du HTML correctement structuré (conforme aux normes). Mais il a une option pour revenir à l'utilisation de BeautifulSoup comme analyseur: ElementSoup .
la source