Python: die Verwendung von xpath-lokal / auf einem bestimmten element
Ich versuche, die links von einer Seite mit xpath. Das problem ist, ich will nur die links innerhalb einer Tabelle, aber wenn ich den xpath-Ausdruck auf der ganzen Seite werde ich links erfassen, die ich nicht will.
Beispiel:
tree = lxml.html.parse(some_response)
links = tree.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")
Das problem ist, dass die expression auf das gesamte Dokument. Ich befindet sich das element, das ich will, zum Beispiel:
tree = lxml.html.parse(some_response)
root = tree.getroot()
table = root[1][5] #for example
links = table.xpath("//a[contains(@href, 'http://www.example.com/filter/')]")
Aber dass scheint zu sein, das durchführen der Abfrage in der das gesamte Dokument als auch, wie ich immer noch bin der Erfassung der links außerhalb der Tabelle. Auf dieser Seite sagt, dass "Wenn xpath() verwendet wird, auf ein Element, wird der XPath-Ausdruck evaluiert wird, das element (wenn auch relativen) oder gegen die Wurzel des Baumes (wenn absolute):". Also, was ich benutze ist ein absoluter Ausdruck, und ich brauche, um es relativ? Ist es das?
Im Grunde, wie kann ich die Filter nur Elemente, die existieren in dieser Tabelle?
InformationsquelleAutor pvt pns | 2011-01-24
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ihre xpath beginnt mit einem Schrägstrich (
/
) und ist daher absolut. Fügen Sie einen Punkt (.
) vor, um es relativ zum aktuellen element, d.h.pns, Die ist ein starker Indikator dafür, etwas anderes ist falsch. Können Sie hochladen und link, um ein vollständiges Beispiel? Wenn Sie nicht möchten, dass zu tun, Sie können auch mich direkt zu Kontaktieren (klicken Sie auf meinen Namen, siehe Kontaktmöglichkeiten)
Sie schrieb
descendant::a[contains(@href, ...)]
als ein relativer Ausdruck.pns sollte Es
.//a
zu suchen, die für jede Tiefe im aktuellen element.ja, ich hatte das falsche element vor. jetzt funktioniert es.
InformationsquelleAutor phihag
Eine andere Möglichkeit wäre, zu Fragen, die direkt für Elemente in Ihre Tabelle.
Zum Beispiel:
Wo
**criteria**
ist erforderlich, wenn viele Tabellen in die Seite. Einige mögliche Kriterien wären, um filter auf der Grundlage der Tabelle id oder Klasse. Zum Beispiel:InformationsquelleAutor Pablo Guerrero