Analizar html usando python

Analizar html usando python
Parsing HTML es una de las tareas más comunes realizadas hoy en día para recopilar información de los sitios web y extraerlo para diversos fines, como establecer el rendimiento de los precios de un producto a lo largo del tiempo, revisiones de un libro en un sitio web y mucho más. Existen muchas bibliotecas como Beautifulsoup en Python que abstrae tantos puntos dolorosos en el análisis de HTML, pero vale la pena saber cómo funcionan esas bibliotecas por debajo de esa capa de abstracción.

En esta lección, eso es lo que pretendemos hacer. Descubriremos cómo se pueden extraer valores de diferentes etiquetas HTML y también anularemos la funcionalidad predeterminada de este módulo para agregar alguna lógica propia. Haremos esto usando el Htmlparser Clase en Python en html.pasador módulo. Veamos el código en acción.

Mirando la clase htmlparser

Para analizar el texto HTML en Python, podemos hacer uso de Htmlparser clasificar html.pasador módulo. Veamos la clase DFinition para el Htmlparser clase:

Clase HTML.pasador.Htmlparser (*, convert_charrefs = true)

El convert_charrefs campo, si se establece en True, hará que todas las referencias de personajes se conviertan a sus equivalentes unicode. Solo el script/estilo Los elementos no se convierten. Ahora, intentaremos comprender cada función para esta clase para comprender mejor lo que hace cada función.

  • handle_startendtag Esta es la primera función que se activa cuando la cadena HTML se pasa a la instancia de clase. Una vez que el texto llega aquí, el control se pasa a otras funciones en la clase que se reduce a otras etiquetas en la cadena. Esto también está claro en la definición de esta función:
    Def Handle_StartendTag (self, tag, attrs):
    ser.Handle_starttag (etiqueta, attrs)
    ser.Handle_endtag (etiqueta)
  • Handle_Starttag: Este método administra la etiqueta de inicio para los datos que recibe. Su definición es como se muestra a continuación:
    Def Handle_Starttag (self, tag, attrs):
    aprobar
  • Handle_endtag: Este método administra la etiqueta final para los datos que recibe:
    Def Handle_endtag (self, tag):
    aprobar
  • Handle_charref: Este método administra las referencias de caracteres en los datos que recibe. Su definición es como se muestra a continuación:
    Def Handle_Charref (self, nombre):
    aprobar
  • manejar_EntityRef: Esta función maneja las referencias de la entidad en el HTML transmitido a ella:
    Def Handle_EntityRef (self, nombre):
    aprobar
  • Handle_data: Esta es la función donde se realiza un trabajo real para extraer valores de las etiquetas HTML y se pasa los datos relacionados con cada etiqueta. Su definición es como se muestra a continuación:
    Def handle_data (self, data):
    aprobar
  • manejar_comment: Usando esta función, también podemos obtener comentarios adjuntos a una fuente HTML:
    Def Handle_Comment (self, data):
    aprobar
  • Handle_pi: Como HTML también puede tener instrucciones de procesamiento, esta es la función en la que se muestra su definición: a continuación:
    Def Handle_pi (self, data):
    aprobar
  • Handle_Decl: Este método maneja las declaraciones en el HTML, su definición se proporciona como:
    Def Handle_Decl (self, dec):
    aprobar

Subclasificación de la clase HTMLParser

En esta sección, subsplicaremos la clase HTMLParser y analizaremos algunas de las funciones que se llaman cuando los datos HTML se pasan a la instancia de clase. Escribamos un script simple que haga todo esto:

de html.PARSER IMPORT HTMLPARSER
clase LinuxhtmlParser (htmlparser):
Def Handle_Starttag (self, tag, attrs):
Imprimir ("Etiqueta de inicio encontrado:", etiqueta)
Def Handle_endtag (self, tag):
Imprimir ("Etiqueta final encontrada:", etiqueta)
Def handle_data (self, data):
Imprimir ("Datos encontrados:", datos)
parser = linuxhtmlParser ()
pasador.alimentar("
'

Módulo de análisis de Python HTML


')

Esto es lo que recuperamos con este comando:

Python htmlparser subclase

Funciones htmlparser

En esta sección, trabajaremos con varias funciones de la clase HTMLPARSER y veremos la funcionalidad de cada uno de ellos:

de html.PARSER IMPORT HTMLPARSER
de html.Entidades Nombre de importación2CodePoint
clase LinuxHint_Parse (htmlparser):
Def Handle_Starttag (self, tag, attrs):
Imprimir ("Etiqueta de inicio:", etiqueta)
para attr en attrs:
imprimir ("attr:", attr)
Def Handle_endtag (self, tag):
Imprimir ("Etiqueta final:", etiqueta)
Def handle_data (self, data):
imprimir ("datos:", datos)
Def Handle_Comment (self, data):
Imprimir ("Comentario:", datos)
Def Handle_EntityRef (self, nombre):
c = chr (name2CodePoint [nombre])
imprimir ("llamado ent:", c)
Def Handle_Charref (self, nombre):
Si nombre.Startswith ('x'):
c = chr (int (nombre [1:], 16))
demás:
c = chr (int (nombre))
Imprimir ("Número:", C)
Def Handle_Decl (self, data):
Imprimir ("Decl:", datos)
parser = linuxhint_parse ()

Con varias llamadas, alimentemos los datos HTML separados a esta instancia y ver qué salida generan estas llamadas. Comenzaremos con un simple Mordaz cadena:

pasador.alimentar(''"http: // www.W3.org/tr/html4/estricto.dtd "> ')

Esto es lo que recuperamos con esta llamada:

Cadena de doctype

Probemos ahora una etiqueta de imagen y veamos qué datos extrae:

pasador.alimentar('')

Esto es lo que recuperamos con esta llamada:

Etiqueta de imagen htmlparser

A continuación, intentemos cómo se comporta la etiqueta de script con las funciones de Python:

pasador.alimentar(''
'alerta("Linuxhint Python"); ')
pasador.Feed ('#Python Color: Green')
pasador.Feed ('#Python Color: Green')

Esto es lo que recuperamos con esta llamada:

Etiqueta de script en htmlparser

Finalmente, también pasamos comentarios a la sección HTMLPARSER:

pasador.alimentar(''
'Contenido específico de IE')

Esto es lo que recuperamos con esta llamada:

Comentarios de análisis

Conclusión

En esta lección, observamos cómo podemos analizar HTML usando la clase HtmlParser de Python sin ninguna otra biblioteca. Podemos modificar fácilmente el código para cambiar la fuente de los datos HTML a un cliente HTTP.

Lea más publicaciones basadas en Python aquí.