Ich suche nach einem HTML-Parser-Modul für Python, mit dem ich die Tags in Form von Python-Listen / Wörterbüchern / Objekten erhalten kann.
Wenn ich ein Dokument des Formulars habe:
<html>
<head>Heading</head>
<body attr1='val1'>
<div class='container'>
<div id='class'>Something here</div>
<div>Something else</div>
</div>
</body>
</html>
dann sollte es mir eine Möglichkeit geben, über den Namen oder die ID des HTML-Tags auf die verschachtelten Tags zuzugreifen, damit ich sie grundsätzlich bitten kann, mir den Inhalt / Text im zu erhalten div
Tag mit Tag class='container'
enthaltenen body
oder etwas Ähnlichem zu geben.
Wenn Sie die Funktion "Element überprüfen" von Firefox (HTML anzeigen) verwendet haben, wissen Sie, dass Sie alle Tags auf eine schöne verschachtelte Weise wie einen Baum erhalten.
Ich würde ein eingebautes Modul bevorzugen, aber das könnte etwas zu viel verlangen.
Ich habe viele Fragen zu Stack Overflow und ein paar Blogs im Internet durchgesehen und die meisten schlagen BeautifulSoup oder lxml oder HTMLParser vor, aber nur wenige dieser Details beschreiben die Funktionalität und enden einfach als Debatte darüber, welche schneller / effizienter ist.
quelle
Antworten:
Ich denke, Sie brauchen keine Leistungsbeschreibungen - lesen Sie einfach, wie BeautifulSoup funktioniert. Schauen Sie sich die offizielle Dokumentation an .
quelle
from bs4 import BeautifulSoup
lxml
stattdessen besser die Bibliothek (siehe Antwort unten). Mitcssselect
es ist sehr nützlich , als gut und die Leistung ist oft 10- bis 100-fach besser als die anderen Bibliotheken zur Verfügung.class
Attribut ist etwas Besonderes:BeautifulSoup(html).find('div', 'container').text
Ich denke, was Sie suchen, ist Pyquery :
Ein Beispiel dafür, was Sie wollen, könnte sein:
Und es werden dieselben Selektoren verwendet wie das Inspect-Element von Firefox oder Chrome. Beispielsweise:
Der Selektor für inspizierte Elemente lautet 'div # mw-head.noprint'. In Pyquery müssen Sie nur diesen Selektor übergeben:
quelle
Hier können Sie mehr über verschiedene HTML-Parser in Python und deren Leistung lesen. Obwohl der Artikel etwas veraltet ist, gibt er Ihnen dennoch einen guten Überblick.
Leistung des Python-HTML-Parsers
Ich würde BeautifulSoup empfehlen, obwohl es nicht eingebaut ist. Nur weil es so einfach ist, mit solchen Aufgaben zu arbeiten. Z.B:
quelle
from bs4 import BeautifulSoup
Im Vergleich zu den anderen Parser-Bibliotheken
lxml
ist extrem schnell:Und damit ist
cssselect
es auch ganz einfach, HTML-Seiten zu kratzen:lxml.html Dokumentation
quelle
import requests
, Puffer in Datei speichern: stackoverflow.com/a/14114741/1518921 (oder urllib), nach dem Laden der gespeicherten Datei mit Parse,doc = parse('localfile.html').getroot()
1.7
Sekunden, aber das Anwenden von lxml hat es fast um das*100
SCHNELLE beschleunigt! Wenn Sie Wert auf Leistung legen, ist lxml die beste OptionIch empfehle lxml zum Parsen von HTML. Siehe "HTML analysieren" (auf der lxml-Site).
Nach meiner Erfahrung bringt Beautiful Soup komplexes HTML durcheinander. Ich glaube, das liegt daran, dass Beautiful Soup kein Parser ist, sondern ein sehr guter String-Analysator.
quelle
Ich empfehle die Verwendung der Justext- Bibliothek:
https://github.com/miso-belica/jusText
Verwendung: Python2:
Python3:
quelle
Ich würde EHP verwenden
https://github.com/iogf/ehp
Hier ist es:
Ausgabe:
quelle