Lorsque vous essayez d'extraire le titre d'une page HTML, j'ai toujours utilisé la regex suivante: qui extraire tout entre les balises dans un document et ignorera les étiquettes elles-mêmes. Cependant, lorsque vous essayez d'utiliser cette regex dans Python, il soulève l'exception suivante: p> Le code que j'utilise est le suivant: P> pattern = re.compile('(?<=<title>)([\s\S]*)(?=</title>)')
m = pattern.search(f)
5 Réponses :
Mélanger l'idée d'analyser HTML avec des expressions régulières et utilisez plutôt une bibliothèque d'analyse HTML. Après une recherche rapide, j'ai trouvé Celui-ci . C'est un moyen beaucoup plus sûr d'extraire des informations à partir d'un fichier HTML. P>
N'oubliez pas que HTML n'est pas une langue régulière afin que les expressions régulières sont fondamentalement le mauvais outil pour extraire des informations de celui-ci. P>
Beautifulsoup ( CreMamy.com/software/Beautiful ) est également une bonne option.
Oui et non. Vous ne devriez pas utiliser Regex pour analyser une DOM entière ou des envoi de balises complexes. Cependant, l'analyse d'une seule étiquette non imbriquée, car l'OP tente de faire, est une utilisation parfaitement légitime de regex.
Si vous voulez simplement obtenir la balise de titre,
html=urllib2.urlopen("http://somewhere").read()
for item in html.split("</title>"):
if "<title>" in item:
print item[ item.find("<title>")+7: ]
Qu'en est-il de quelque chose comme:
La regex pour extraire le contenu des balises HTML / XML non imbriquées est en fait très simple: Cependant, pour quelque chose de plus complexe, vous devriez vraiment utiliser un analyseur DOM approprié comme Urllib ou beauxoup. p> p>
Existe-t-il une raison pour être une affirmation de largeur zéro? Pourriez-vous simplement utiliser un groupe de non-capture?
Bien que vous ne devriez pas utiliser des expressions régulières pour traiter HTML. Pourquoi utilisez-vous des regards du tout et non quelque chose comme ([\ S \ s] *) title> code> et prenez le match du premier groupe?