Können wir Xpath mit BeautifulSoup verwenden?
Ich bin mit BeautifulSoup zu kratzen, eine url und ich hatte folgenden code
import urllib
import urllib2
from BeautifulSoup import BeautifulSoup
url = "http://www.example.com/servlet/av/ResultTemplate=AVResult.html"
req = urllib2.Request(url)
response = urllib2.urlopen(req)
the_page = response.read()
soup = BeautifulSoup(the_page)
soup.findAll('td',attrs={'class':'empformbody'})
Nun in dem obigen code, den wir verwenden können findAll
zu bekommen, tags und Informationen im Zusammenhang mit Ihnen, aber ich möchte mit xpath verwenden. Ist es möglich, mithilfe von xpath-mit BeautifulSoup? Wenn möglich, kann jemand bitte geben Sie mir ein Beispiel-code, so dass es hilfreicher sein?
InformationsquelleAutor der Frage shiva krishna | 2012-07-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
NÖ, BeautifulSoup, von selbst, nicht unterstützt XPath-Ausdrücke.
Alternative Bibliothek, lxmlhat Unterstützung von XPath 1.0. Es hat eine BeautifulSoup-kompatiblen Modus wo Sie versuchen und zu analysieren, gebrochen HTML-der Weg, die Suppe tut. Jedoch, die Standard-lxml HTML-parser funktioniert genauso gut einen job zu Parsen gebrochen HTML, und ich glaube, die ist schneller.
Sobald Sie analysiert Ihr Dokument in eine lxml-Baum, die Sie verwenden können, die
.xpath()
Methode, nach Elementen zu suchen.Von Interesse für Sie ist die CSS Selector support; die
CSSSelector
Klasse übersetzt CSS-Anweisungen in XPath-Ausdrücken, so dass Ihre Suche nachtd.empformbody
viel einfacher:Coming full circle: BeautifulSoup sich hat haben ziemlich anständig CSS selector support:
InformationsquelleAutor der Antwort Martijn Pieters
Kann ich bestätigen, dass es keine XPath-Unterstützung in Schöne Suppe.
InformationsquelleAutor der Antwort Leonard Richardson
Martijn ' s code funktioniert nicht mehr richtig (es ist 4+ Jahre alt...), die
etree.parse()
line-prints auf der Konsole und nicht den Wert zuzuweisen, um dietree
variable. Referenzierung dieseich war in der Lage, herauszufinden, das funktioniert mit Anfragen und lxml:InformationsquelleAutor der Antwort wordsforthewise
BeautifulSoup hat eine Funktion namens findNext vom aktuellen element gerichtet childern,also:
Obigen code können imitieren die folgenden xpath:
InformationsquelleAutor der Antwort user3820561
Ich gesucht habe durch Ihre docs und es scheint kein xpath-option. Auch, wie Sie sehen können hier auf eine ähnliche Frage SO, der OP fragt nach einer übersetzung von xpath-BeautifulSoup, also mein Fazit wäre - Nein, es ist keine xpath-Analyse zur Verfügung.
InformationsquelleAutor der Antwort Nikola
Dies ist ein ziemlich Alter thread, aber es gibt einen work-around-Lösung, die jetzt vielleicht nicht in BeautifulSoup zu der Zeit.
Hier ist ein Beispiel dafür, was ich getan habe. Ich benutze den "Anfragen" - Modul zum Lesen eines RSS feed und erhalten Sie Ihren text in eine variable namens "rss_text". Mit, dass, I run thru BeautifulSoup zu suchen, für die xpath /rss/channel/title, und abrufen der Inhalte. Es ist nicht genau XPath in seiner ganzen Pracht (Platzhalter, mehrere Pfade, etc.), aber wenn Sie nur ein basic Weg Sie suchen möchten, das funktioniert.
InformationsquelleAutor der Antwort David A