Ho trovato HTMLParser per sax e xml.minidom per xml. Ho un html piuttosto ben formato quindi non ho bisogno di un parser troppo forte - qualche suggerimento?Python: Esiste un pacchetto integrato per analizzare html in dom
risposta
Dai uno sguardo allo BeautifulSoup. È popolare ed eccellente nell'analisi HTML.
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."
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
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
Per gestire gli oggetti DOM, è possibile utilizzare HTMLDOM per python.
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)
- 1. Come analizzare HTML in DOM con Grunt
- 2. Come analizzare HTML malformato in python
- 3. Esiste un pacchetto consigliato per l'apprendimento automatico in Python?
- 4. Esiste un modo integrato per ottenere la lunghezza di un iterabile in python?
- 5. Pip non può aggiornare un pacchetto integrato in Ubuntu 15.04
- 6. Esiste un metodo Java integrato per inserire un array?
- 7. Come analizzare HTML in PHP?
- 8. Parser DOM HTML HTML?
- 9. Un parser JavaScript per DOM
- 10. Esiste un modo integrato per confrontare due iteratori?
- 11. HTML Agility pacchetto
- 12. Come reinizializzare un interprete Python integrato?
- 13. Esiste una buona libreria Python in grado di analizzare C++?
- 14. Metodo per analizzare il documento HTML in Ruby?
- 15. Miglior ordine degli attributi in HTML per le query DOM
- 16. Esiste un equivalente WPF per un DOM explorer?
- 17. Esiste un sistema di template html solo per php?
- 18. Database per un sistema integrato
- 19. Ritardo per Simple HTML DOM Classe
- 20. Come analizzare html in modo più elegante in PHP?
- 21. Esiste SourceMaps per HTML?
- 22. Esiste un 'uomo' per Python?
- 23. Pulisci HTML in Python
- 24. Come analizzare un file DOT in Python
- 25. Esiste un sendKey per Mac in Python?
- 26. Python: definire una funzione solo se il pacchetto esiste
- 27. Analisi HTML in Python
- 28. Codice Python per analizzare e ispezionare C++
- 29. Esiste un oggetto in C# che consente una facile gestione del DOM HTML?
- 30. semplice html dom scrapping file html grande
Non è costruito in se non mi sbaglio – Guy
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
Si suppone che BeautifulSoup analizzi l'HTML sporco non "abbastanza ben formato". – tbz