2010-03-12 22 views
8

Una búsqueda de "python" y "xml" devuelve una variedad de bibliotecas para combinar las dos.¿Qué biblioteca XML para qué fines?

Esta lista probablemente defectuosa:

  • xml.dom
  • xml.etree
  • xml.sax
  • xml.parsers.expat
  • PyXML
  • BeautifulSoup?
  • HTMLParser
  • htmllib
  • sgmllib

bueno si alguien puede ofrecer un breve resumen de cuándo utilizar la cual, y por qué.

+0

Fui con sopa hermosa en esa ocasión ya que los demás estaban siendo pedantes sobre la entrada; algo sobre lo que no tenía control. –

+0

Desde la perspectiva de la productividad del desarrollador y la facilidad de uso, tuve una gran experiencia con 'BeautifulSoup'. La pitón Anaconda se embarca con ella. – arun

Respuesta

7

La división DOM/SAX es básica. Se aplica no solo a Python ya que DOM y SAX son de lenguaje cruzado.

DOM: lea todo el documento en la memoria y manipúlelo. Bueno para:

  • relaciones complejas a través de las etiquetas en el margen de beneficio
  • pequeños documentos XML intrincados
  • Precauciones:
    • Fácil de usar memoria excesiva

SAX: análisis t documenta mientras lo lees. Bueno para:

  • Los documentos largos o corrientes abiertas
  • lugares donde la memoria es una limitación
  • Precauciones:
    • Tendrá que codificar un analizador de estado, que puede ser complicado

BeautifulSoup:

Ideal para etiquetas HTML o etiquetas no muy bien formadas. Fácil de usar y rápido. Bueno para el raspado de la pantalla, etc. Puede funcionar con marcado donde los basados ​​en XML simplemente a través de un error diciendo que el marcado es incorrecto.

La mayor parte del resto no he usado, pero no creo que haya reglas duras y rápidas sobre cuándo usarlas. Solo sus consideraciones estándar: quién va a mantener el código, qué API le resulta más fácil de usar, qué tan bien funcionan, etc.

En general, para las necesidades básicas, es bueno usar los módulos de la biblioteca estándar ya que son "estándar" y, por lo tanto, están disponibles y son bien conocidos.Sin embargo, si necesita profundizar en algo, casi siempre hay módulos no estándares más nuevos con funcionalidad superior fuera de la biblioteca estándar.

+0

Encontré este buen artículo con algunos buenos ejemplos de elementos de elementos usando ambos estilos de analizadores: http://www.doughellmann.com/PyMOTW/xml/etree/ElementTree/parse.html –

+0

tu enlace pymotw tiene muchos buenos ejemplos sobre la api estándar. en realidad se llama 'módulo python de la semana'. – n611x007

1

No hago mucho con XML, pero cuando lo he necesitado, lxml ha sido un placer trabajar con él y aparentemente es bastante rápido. La API del árbol de elementos es muy buena en una configuración orientada a objetos.

4

encuentro xml.etree esencialmente suficiente para todo, excepto para BeautifulSoup si alguna vez tengo que analizar roto XML (no es un problema común, a diferencia de HTML rota, que BeautifulSoup también ayuda con y es todas partes): tiene soporte razonable para leer documentos XML enteros en la memoria, navegarlos, crearlos, analizar incrementalmente documentos grandes. lxml es compatible con la misma interfaz, y generalmente es más rápido, útil para mejorar el rendimiento cuando puede permitirse instalar extensiones de Python de terceros (por ejemplo, en App Engine no puede hacerlo), pero xml.etree aún está allí, por lo que puede ejecutar exactamente el mismo código). lxml también tiene más funciones y también ofrece BeautifulSoup.

Las otras librerías que menciona imitan las API diseñadas para lenguajes muy diferentes, y en general no veo ninguna razón para contorsionar Python en esos giros. Si tiene necesidades muy específicas, como soporte para xslt, varios tipos de validaciones, etc., puede valer la pena buscar otras bibliotecas todavía, pero no he tenido esas necesidades en mucho tiempo, así que no estoy actualizado. ofrendas para ellos.

1

Para muchos problemas que puede obtener con el xml. Tiene la gran ventaja de ser parte de la biblioteca estándar. Esto significa que está preinstalado en casi todos los sistemas y que la interfaz será estática. No es el mejor, ni el más rápido, pero está allí.

Para todo lo demás, existe lxml. Específicamente, lxml es mejor para analizar HTML interrumpido, xHTML o feeds sospechosos. Utiliza libxml2 y libxslt para manejar XPath, XSLT y EXSLT. El tutorial es claro y la interfaz es simplista y directa. El resto de las bibliotecas mencionadas existen porque lxml no estaba disponible en su forma actual.

Esta es mi opinión.

Cuestiones relacionadas