In sintesi, lxml
si posiziona come un parser html e xml di qualità di produzione rapidissimo che, tra l'altro, include anche un modulo soupparser
per ricorrere alle funzionalità di BeautifulSoup. BeautifulSoup
è un progetto di una sola persona, progettato per farti risparmiare tempo per estrarre rapidamente i dati da html o xml di scarsa qualità.
lxml documentation afferma che entrambi i parser presentano vantaggi e svantaggi. Per questo motivo, lxml
fornisce un soupparser
in modo da poter passare avanti e indietro. Citando,
BeautifulSoup utilizza un approccio di parsing diverso. Non è un vero parser HTML ma usa le espressioni regolari per immergersi nella zuppa tag. È quindi più indulgente in alcuni casi e meno buono in altri. È non raro che lxml/libxml2 analizzi e risolva l'HTML spezzato meglio, ma BeautifulSoup ha il supporto di superiour per il rilevamento della codifica. E ' molto dipende dall'input che il parser funziona meglio.
Alla fine che stanno dicendo,
Lo svantaggio di usare questo parser è che è molto più lento rispetto il parser HTML di lxml. Pertanto, se le prestazioni sono importanti, è possibile che si desideri che consideri l'uso del programma di smistamento solo come riserva per alcuni casi.
Se li ho capito bene, significa che il parser zuppa è più robusto --- si può fare con una "zuppa" di tag malformati, utilizzando le espressioni regolari --- mentre lxml
è più semplice e giusto analizza le cose e costruisce un albero come ci si aspetterebbe. Presumo che si applica anche a BeautifulSoup
stesso, non solo allo soupparser
per lxml
.
Essi mostrano anche come a beneficiare di rilevamento codifica BeautifulSoup
s', mentre ancora l'analisi rapidamente con lxml
:
>>> from BeautifulSoup import UnicodeDammit
>>> def decode_html(html_string):
... converted = UnicodeDammit(html_string, isHTML=True)
... if not converted.unicode:
... raise UnicodeDecodeError(
... "Failed to detect encoding, tried [%s]",
... ', '.join(converted.triedEncodings))
... # print converted.originalEncoding
... return converted.unicode
>>> root = lxml.html.fromstring(decode_html(tag_soup))
(Same fonte: http://lxml.de/elementsoup.html).
In parole di creatore BeautifulSoup
s',
Questo è tutto! Divertiti! Ho scritto Beautiful Soup per salvare tutti quanti. Una volta che ci si abitua ad esso, dovresti essere in grado di svelare i dati dei siti web mal progettati entro pochi minuti. Inviami una email se hai commenti, problemi o vuoi che tu conosca il tuo progetto che utilizza Beautiful Soup.
--Leonard
Citato dal Beautiful Soup documentation.
Spero che ora sia chiaro. La zuppa è un brillante progetto in prima persona progettato per farti risparmiare tempo per estrarre i dati da siti Web mal progettati.L'obiettivo è quello di farti risparmiare tempo in questo momento, per portare a termine il lavoro, non necessariamente per farti risparmiare tempo a lungo termine, e sicuramente non per ottimizzare le prestazioni del tuo software.
Inoltre, dal lxml website,
lxml è stato scaricato dal Python Package Index più di due milioni di volte ed è disponibile anche direttamente in molti pacchetto distribuzioni, ad esempio, per Linux o MacOS-X.
E, da Why lxml?,
le librerie C libxml2 e libxslt hanno enormi vantaggi: ... conforme agli standard ... Full-optional ... veloce. veloce! VELOCE! ... lxml è vincolante un nuovo Python per libxml2 e libxslt ...
possibile duplicato di [? BeautifulSoup e lxml.html - cosa preferiscono] (http://stackoverflow.com/questions/4967103/beautifulsoup-and-lxml- html-what-to-prefer) Ho scritto una [risposta dettagliata] (http://stackoverflow.com/a/19548832/1243926); ripubblicato qui perché la domanda è duplice. – osa
Scusa, volevo chiudere l'altro. Ora ha contrassegnato l'altro. Ho pensato che non importava dove alzare la bandiera, nella più vecchia o nella più nuova. – osa