Quale è migliore e più utile per l'html malformato?
Non riesco a trovare l'uso di libxml2.Quale di lxml e libxml2 è migliore per l'analisi di html malformato in Python?
Grazie.
Quale è migliore e più utile per l'html malformato?
Non riesco a trovare l'uso di libxml2.Quale di lxml e libxml2 è migliore per l'analisi di html malformato in Python?
Grazie.
Nel libxml2 page è possibile vedere questa nota:
Si noti che alcuni dei puristi Python non amano il set predefinito di Python, piuttosto che lamentarsi suggerisco che hanno uno sguardo al lxml le associazioni più divinatorio per libxml2 e libxslt e controlla la mailing-list.
e nella pagina di lxml quest'altra:
Il toolkit XML lxml è un Pythonic vincolante per le librerie C libxml2 e libxslt. È unico in quanto combina la velocità e la completezza delle funzionalità XML di queste librerie con la semplicità di un'API Python nativa, per lo più compatibile ma superiore alla ben nota API ElementTree.
Quindi, in sostanza, con lxml
si ottiene esattamente la stessa funzionalità, ma con aa API divinatorio compatibile con la libreria ElementTree
nella libreria standard (quindi questo significa la documentazione libreria standard sarà utile per imparare ad usare lxml
). Ecco perché, lxml
è preferito su libxml2
(anche quando l'implementazione sottostante è la stessa).
Modifica: avendo detto che, come spiegano altre risposte, per analizzare l'html malformato l'opzione migliore è utilizzare BeautifulSoup
. Una cosa interessante da notare è che, se è stato installato lxml
, BeautifulSoup
lo userà come spiegato nel documentation per la nuova versione:
Se non si specifica nulla, si otterrà il miglior parser HTML questo è installato. Beautiful Soup classifica il parser di lxml come il migliore, quindi html5lib's, quindi il parser integrato di Python.
In ogni caso, anche se BeautifulSoup
utilizza lxml
sotto il cofano, sarete in grado di analizzare rotto html
che non si può analizzare con xml
direttamente.Per esempio:
>>> lxml.etree.fromstring('<html>')
...
XMLSyntaxError: Premature end of data in tag html line 1, line 1, column 7
Tuttavia:
>>> bs4.BeautifulSoup('<html>', 'lxml')
<html></html>
Infine, ricordiamo che lxml
fornisce anche un'interfaccia per la vecchia versione di BeautifulSoup
come segue:
>>> lxml.html.soupparser.fromstring('<html>')
<Element html at 0x13bd230>
Così, alla fine del giorno, probabilmente userete lxml
e BeautifulSoup
comunque. L'unica cosa che devi scegliere è l'API che ti piace di più.
lxml è generalmente consigliato. In particolare, lxml.html (se ricordo correttamente).
Credo che faccia uso di libxml2 sotto il cofano, ma ricade su beautifulsoup se l'html è particolarmente sgradevole, ma non credetemi, consultate il sito web! (http://http://lxml.de/)
Provare invece a fare il beutifulsoup. È finalizzato all'analisi di dati scarsamente strutturati.
BeautifulSoup è buono per analizzare il codice HTML. Puoi controllare il suo esempio e scoprire che è un buon confronto con gli altri.