Posterior a de una larga búsqueda de datos solucionamos esta cuestión que presentan ciertos los lectores. Te brindamos la solución y nuestro objetivo es servirte de mucha apoyo.
Código fuente:Lib / html / parser.py
Este módulo define una clase HTMLParser
que sirve como base para analizar archivos de texto formateados en HTML (HyperText Mark-up Language) y XHTML.
class html.parser.HTMLParser(*, convert_charrefs=True)
-
Cree una instancia de analizador capaz de analizar el marcado no válido.
Si convert_charrefs es
True
(el predeterminado), todas las referencias de caracteres (excepto lasscript
/style
elementos) se convierten automáticamente a los caracteres Unicode correspondientes.Un
HTMLParser
La instancia se alimenta con datos HTML y llama a los métodos del controlador cuando se encuentran etiquetas de inicio, etiquetas de finalización, texto, comentarios y otros elementos de marcado. El usuario debe subclaseHTMLParser
y anular sus métodos para implementar el comportamiento deseado.Este analizador no comprueba que las etiquetas finales coincidan con las etiquetas de inicio ni llama al controlador de etiquetas finales para los elementos que se cierran implícitamente al cerrar un elemento externo.
Modificado en la versión 3.4: convert_charrefs argumento de palabra clave agregado.
Modificado en la versión 3.5: El valor predeterminado para el argumento convert_charrefs es ahora
True
.
Ejemplo de aplicación de analizador HTML
Como ejemplo básico, a continuación se muestra un analizador HTML simple que utiliza la HTMLParser
class para imprimir etiquetas de inicio, etiquetas de finalización y datos a medida que se encuentran:
from html.parser import HTMLParser classMyHTMLParser(HTMLParser):defhandle_starttag(self, tag, attrs):print("Encountered a start tag:", tag)defhandle_endtag(self, tag):print("Encountered an end tag :", tag)defhandle_data(self, data):print("Encountered some data :", data) parser = MyHTMLParser() parser.feed('Test ''')
La salida será entonces:
Encountered a start tag: html Encountered a start tag: head Encountered a start tag: title Encountered some data : Test Encountered an end tag : title Encountered an end tag : head Encountered a start tag: body Encountered a start tag: h1 Encountered some data : Parse me! Encountered an end tag : h1 Encountered an end tag : body Encountered an end tag : html
Métodos HTMLParser
HTMLParser
instancias tienen los siguientes métodos:
HTMLParser.feed(data)
-
Alimente un poco de texto al analizador. Se procesa en la medida en que consta de elementos completos; Los datos incompletos se almacenan en el búfer hasta que se alimentan más datos o
close()
se llama. datos debe serstr
.
HTMLParser.close()
-
Fuerza el procesamiento de todos los datos almacenados en búfer como si fueran seguidos por una marca de fin de archivo. Este método puede ser redefinido por una clase derivada para definir un procesamiento adicional al final de la entrada, pero la versión redefinida siempre debe llamar al
HTMLParser
método de clase baseclose()
.
HTMLParser.reset()
-
Restablece la instancia. Pierde todos los datos sin procesar. Esto se llama implícitamente en el momento de la instanciación.
HTMLParser.getpos()
-
Devuelve el número de línea actual y el desplazamiento.
HTMLParser.get_starttag_text()
-
Devuelve el texto de la etiqueta de inicio abierta más recientemente. Normalmente, esto no debería ser necesario para el procesamiento estructurado, pero puede ser útil para tratar con HTML “tal como se implementó” o para volver a generar entradas con cambios mínimos (espacios en blanco entre attributes se puede conservar, etc.).
Los siguientes métodos se llaman cuando se encuentran datos o elementos de marcado y están destinados a ser reemplazados en una subclase. Las implementaciones de la clase base no hacen nada (excepto para handle_startendtag()
):
HTMLParser.handle_starttag(tag, attrs)
-
Este método se llama para manejar el inicio de una etiqueta (p. Ej.
).
los etiqueta argumento es el nombre de la etiqueta convertida a minúsculas. los attrs argumento es una lista de
(name, value)
pares que contienen el attributes encontrado dentro de la etiqueta<>
soportes. los nombre se traducirá a minúsculas y las comillas en el valor se han eliminado y se han reemplazado las referencias a personajes y entidades.Por ejemplo, para la etiqueta
, este método se llamaría como
handle_starttag('a', [('href', 'https://www.cwi.nl/')])
.Todas las referencias de entidad de
html.entities
son reemplazados en el attribute valores.
HTMLParser.handle_endtag(tag)
-
Este método se llama para manejar la etiqueta final de un elemento (p. Ej.