2012-02-17 8 views

risposta

13

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ù.

0

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/)

1

BeautifulSoup è buono per analizzare il codice HTML. Puoi controllare il suo esempio e scoprire che è un buon confronto con gli altri.