Quiero una expresión regular para extraer el título de una página HTML. Actualmente tengo esto:
title = re.search('<title>.*</title>', html, re.IGNORECASE).group()
if title:
title = title.replace('<title>', '').replace('</title>', '')
¿Existe una expresión regular para extraer solo el contenido de <título> para que no tenga que eliminar las etiquetas?
Respuestas:
Úselo
(
)
en regexp ygroup(1)
en python para recuperar la cadena capturada (re.search
se devolveráNone
si no encuentra el resultado, así que no la usegroup()
directamente ):fuente
import re
o de lo contrario obtendrásNameError: name 're' is not defined
Tenga en cuenta que al comenzar
Python 3.8
, y la introducción de expresiones de asignación (PEP 572) (:=
operador), es posible mejorar un poco la solución de Krzysztof Krasoń capturando el resultado del partido directamente dentro de la condición if como una variable y reutilizándolo en el cuerpo de la condición :fuente
Intente usar grupos de captura:
fuente
fuente
¿Puedo recomendar a Beautiful Soup? La sopa es una muy buena lib para analizar todo su documento html.
fuente
Tratar:
fuente
.*?
en caso de que haya varios</title>
en el documento (poco probable pero nunca se sabe).Las piezas de código proporcionadas no cumplen con lo que
Exceptions
puedo sugerir.Esto devuelve una cadena vacía por defecto si no se ha encontrado el patrón o la primera coincidencia.
fuente
Creo que esto debería ser suficiente:
... suponiendo que su texto (HTML) esté en una variable llamada "texto".
Esto también supone que no hay otras etiquetas HTML que se puedan incrustar legalmente dentro de una etiqueta de TÍTULO HTML y no hay forma de incrustar legalmente ningún otro carácter <dentro de dicho contenedor / bloque.
Sin embargo ...
No use expresiones regulares para el análisis HTML en Python. ¡Utiliza un analizador HTML! (A menos que vaya a escribir un analizador completo, lo que sería un trabajo adicional cuando varios analizadores HTML, SGML y XML ya están en las bibliotecas estándar.
Si maneja HTML de sopa de etiqueta del "mundo real" (que con frecuencia no se ajusta a ningún validador SGML / XML), utilice el paquete BeautifulSoup . No está en las bibliotecas estándar (todavía), pero se recomienda ampliamente para este propósito.
Otra opción es: lxml ... que está escrito para HTML correctamente estructurado (conforme a los estándares). Pero tiene una opción para recurrir al uso de BeautifulSoup como analizador: ElementSoup .
fuente