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 las script/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 subclase HTMLParser 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 ser str.

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 base close().

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.