/ / HTML Parser en Python sin corregir HTML - python

Analizador HTML en Python sin corregir HTML - Python

Necesito analizar a través de html pero no necesitola biblioteca de análisis de python para intentar "arreglar" el html. ¿Alguna sugerencia sobre una herramienta o método para usar (en python)? En mi situación, si el html tiene un formato incorrecto, mi secuencia de comandos debe finalizar el procesamiento. Intenté BeautifulSoup pero solucioné cosas que no quería que corrigieran. Estoy creando una herramienta para analizar archivos de plantillas y generar otro estilo de plantilla convertido.

Respuestas

3 para la respuesta № 1

El libro Fundamentos de la Programación de la Red Python. tiene una comparación detallada de lo que parecepara raspar la misma página web con Beautiful Soup y con la biblioteca lxml; pero, en general, encontrará que lxml es más rápido, más efectivo y tiene una API que se adhiere estrechamente a un estándar de Python (la API de ElementTree, que viene con la biblioteca estándar de Python). Vea esta publicación del blog del inimitable Ian Bicking para tener una idea de por qué debería consultar lxml en lugar de la antigua biblioteca Beautiful Soup para analizar HTML:

http://blog.ianbicking.org/2008/12/10/lxml-an-underappreciated-web-scraping-library/


1 para la respuesta № 2

Creo que BeautifulStoneSoup puede hacer esto si pasas en una lista de etiquetas de cierre automático

El defecto más común de BeautifulStoneSoupes que no "t saber acerca de las etiquetas de cierre automático. HTML tiene un conjunto fijo de cierre automático. etiquetas, pero con XML depende de lo que dice la DTD. Puedes decir BeautifulStoneSup que ciertas etiquetas se cierran automáticamente al pasar sus nombres como el argumento selfClosingTags para el constructor:

from BeautifulSoup import BeautifulStoneSoup
xml = "<tag>Text 1<selfclosing>Text 2"
print BeautifulStoneSoup(xml).prettify()
# <tag>
#  Text 1
#  <selfclosing>
#   Text 2
#  </selfclosing>
# </tag>

print BeautifulStoneSoup(xml, selfClosingTags=["selfclosing"]).prettify()
# <tag>
#  Text 1
#  <selfclosing />
#  Text 2
# </tag>