2010-05-06 9 views

Respuesta

11

Eche un vistazo a BeautifulSoup. Es popular y excelente para analizar HTML.

+4

no está ya incluido en si no me equivoco – Guy

+4

No, no está incorporada. Pero puede instalarlo fácilmente usando easy_install o simplemente descargarlo desde el sitio web y ponerlo en PYTHONPATH. Whole BeautifulSoup está contenido en un solo archivo, por lo que no es una gran carga. – Bartosz

+0

Se supone que BeautifulSoup analiza el HTML sucio no "bastante bien formado". – tbz

25

Recomendaría lxml. Me gusta BeautifulSoup, pero en general hay problemas de mantenimiento y problemas de compatibilidad con las versiones posteriores. He estado feliz usando lxml.


después: las mejores recomendaciones son utilizar lxml, html5lib o BeautifulSoup 3.0.8. BeautifulSoup 3.1.x está diseñado para Python 3.xy se sabe que tiene problemas con versiones anteriores de Python, as noted on the BeautifulSoup website.

Ian Bicking tiene un good article en el uso de lxml.

ElementTree es otra recomendación, pero nunca la he usado.


2012-01-18: alguien ha de conseguir y decidido mí y Bartosz downvote porque recomendamos los paquetes de Python que se obtienen con facilidad, pero no forma parte de la distribución de pitón. Entonces, para los altamente literarios StackOverflowers: "Puedes usar xml.dom.minidom, pero nadie recomendará esto sobre las alternativas".

+1

por lo que vale, intenté analizar algo de HTML usando ElementTree y xml minidom, ¡y ambos se atragantaron con errores de análisis en etiquetas de script (javascript)! – Michael

+0

Acabo de agregar una respuesta con un ejemplo de trabajo de xml.dom.minidom. En algunas situaciones, la instalación de un módulo externo es onerosa o imposible. Además, eso es lo que pidió la pregunta original. – velotron

9

BeautifulSoup y lxml son geniales, pero las respuestas no son adecuadas aquí, ya que la pregunta es acerca de los builtins. Aquí hay un ejemplo del uso del módulo integrado minidom para analizar una cadena HTML. Probado con CPython 3.5.2:

from xml.dom.minidom import parseString 

html_string = """ 
<!DOCTYPE html> 
<html><head><title>title</title></head><body><p>test</p></body></html> 
""" 

# extract the text value of the document's <p> tag: 
doc = parseString(html_string) 
paragraph = doc.getElementsByTagName("p")[0] 
content = paragraph.firstChild.data 

print(content) 
Cuestiones relacionadas