2010-05-06 20 views

risposta

11

Dai uno sguardo allo BeautifulSoup. È popolare ed eccellente nell'analisi HTML.

+4

Non è costruito in se non mi sbaglio – Guy

+4

No, non è built-in. Ma puoi installarlo facilmente usando easy_install o semplicemente scaricandolo dal sito web e inserendolo in PYTHONPATH. Whole BeautifulSoup è contenuto in un singolo file, quindi non è un grosso problema. – Bartosz

+0

Si suppone che BeautifulSoup analizzi l'HTML sporco non "abbastanza ben formato". – tbz

25

Vorrei raccomandare lxml. Mi piace BeautifulSoup, ma ci sono problemi di manutenzione in generale e problemi di compatibilità con le versioni successive. Sono stato felice di usare lxml.


tardi: le migliori raccomandazioni sono di utilizzare lxml, html5lib o BeautifulSoup 3.0.8. BeautifulSoup 3.1.x è pensato per python 3.x ed è noto per avere problemi con le precedenti versioni python, as noted on the BeautifulSoup website.

Ian Bicking ha un good article sull'utilizzo di lxml.

ElementTree è un'ulteriore raccomandazione, ma non l'ho mai utilizzata.


2012-01-18: qualcuno è venuto da e ha deciso di downvote me e Bartosz perché abbiamo raccomandato pacchetti python che sono facilmente reperibili ma non fa parte della distribuzione pitone. Quindi per gli StackOverflowers estremamente letterali: "Puoi usare xml.dom.minidom, ma nessuno lo consiglierà sulle alternative."

+1

per quello che vale, ho provato ad analizzare alcuni HTML usando sia ElementTree che xml minidom, ed entrambi hanno soffocato con errori di analisi nei tag script (javascript)! – Michael

+0

Ho appena aggiunto una risposta con un esempio funzionante di xml.dom.minidom. In alcune situazioni, l'installazione di un modulo esterno è gravosa o impossibile. Inoltre, questo è ciò che la domanda originale ha chiesto. – velotron

1

Per gestire gli oggetti DOM, è possibile utilizzare HTMLDOM per python.

9

BeautifulSoup e lxml sono ottime, ma non le risposte appropriate qui poiché la domanda riguarda i builder. Ecco un esempio di utilizzo del modulo integrato minidom per analizzare una stringa HTML. Testato 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)