En resumen, lxml
se posiciona como un analizador html y xml de calidad de producción ultrarrápida que, dicho sea de paso, también incluye un módulo soupparser
para recurrir a la funcionalidad de BeautifulSoup. BeautifulSoup
es un proyecto para una sola persona, diseñado para ahorrarle tiempo y extraer datos rápidamente de html o xml pobremente formados.
lxml documentation dice que ambos analizadores tienen ventajas y desventajas. Por este motivo, lxml
proporciona un soupparser
para que pueda alternar. Citando,
BeautifulSoup utiliza un enfoque de análisis diferente. No es un analizador de HTML real , pero usa expresiones regulares para sumergirse en la sopa de etiquetas. Es por lo tanto, más tolerante en algunos casos y menos bueno en otros. Es no es raro que lxml/libxml2 analice y corrija mejor el código HTML roto, , pero BeautifulSoup tiene soporte adicional para la detección de codificación. Es depende mucho de la entrada que el analizador funciona mejor.
En el extremo que están diciendo,
La desventaja de usar este analizador es que es mucho más lento que el analizador de HTML de lxml. Por lo tanto, si el rendimiento es importante, es posible que desee para considerar el uso del analizador de sopa solo como alternativa en determinados casos.
Si los entiendo correctamente, significa que el analizador sopa es más robusto --- se puede tratar con una "sopa" de etiquetas mal formados mediante el uso de expresiones regulares --- mientras que lxml
es más sencillo y justo analiza cosas y construye un árbol como era de esperar. Supongo que también se aplica al BeautifulSoup
, no solo al soupparser
para lxml
.
También muestran cómo beneficiarse de la detección de codificación BeautifulSoup
's, sin dejar de analizar rápidamente con lxml
:
>>> from BeautifulSoup import UnicodeDammit
>>> def decode_html(html_string):
... converted = UnicodeDammit(html_string, isHTML=True)
... if not converted.unicode:
... raise UnicodeDecodeError(
... "Failed to detect encoding, tried [%s]",
... ', '.join(converted.triedEncodings))
... # print converted.originalEncoding
... return converted.unicode
>>> root = lxml.html.fromstring(decode_html(tag_soup))
(Misma fuente: http://lxml.de/elementsoup.html).
En palabras del creador BeautifulSoup
's,
Eso es todo! ¡Que te diviertas! Escribí Beautiful Soup para ahorrarle tiempo a todos. Una vez que se acostumbre, podrá analizar los datos de sitios web mal diseñados en solo unos minutos. Envíame un correo electrónico si tienes algún comentario, tienes problemas o quieres que sepa sobre tu proyecto que usa Beautiful Soup.
--Leonard
citado del Beautiful Soup documentation.
Espero que esto ya esté claro. La sopa es un brillante proyecto de una sola persona diseñado para ahorrarle tiempo para extraer datos de sitios web mal diseñados.El objetivo es ahorrarle tiempo en este momento, para hacer el trabajo, no necesariamente para ahorrarle tiempo a largo plazo, y definitivamente no para optimizar el rendimiento de su software.
Asimismo, desde el lxml website,
lxml se ha descargado desde el índice de paquetes Python más de dos millones de veces y también está disponible directamente en muchas distribuciones paquete, por ejemplo, para Linux o MacOS-X.
Y, desde Why lxml?,
las librerías de C libxml2 y libxslt tienen enormes beneficios: ... cumplan con los estándares ... Con todas las funciones ... rápido. ¡rápido! ¡RÁPIDO! ... lxml es un nuevo enlace de Python para libxml2 y libxslt ...
posible duplicado de [? BeautifulSoup y lxml.html - qué prefieren] (http://stackoverflow.com/questions/4967103/beautifulsoup-and-lxml- html-what-to-prefer) He escrito una [respuesta detallada] (http://stackoverflow.com/a/19548832/1243926); lo volvió a publicar aquí porque la pregunta es duplicada. – osa
Lo siento, quise cerrar el otro. Ahora marcó el otro. Pensé que no importaba dónde levantar la bandera, en la más antigua o en la más nueva. – osa