xpath: <a href ... aus <img>...</img></a> bekommen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

Hallo, mal wieder in xpath Problem. Habe mich nach Tutorials für xpath erkundigt, allerdings finde ich keine Lösung. Ich erhalte entweder Error oder eine leere Liste.

Ich habe (veranschaulicherweise abgekürzt) folgenden HTML Code:

Code: Alles auswählen

<a href="url.html"> <img src="http://urlx.com/img.gif" alt="TEST TEXT" title="TEST TEXT" width="10"> &nbsp;Text Text</a>
Nun habe ich versucht "url.html" zu bekommen:

Code: Alles auswählen

doc.xpath('//a/@href')
funktioniert logischerweise nicht (bzw gibt mir zu viel aus), also habe ich weiter probiert:

Code: Alles auswählen

doc.xpath('//a//img[@alt="TEST TEXT"]/@href)
gibt leider eine leere Liste aus :K ebenso wie

Code: Alles auswählen

doc.xpath('//a/@href//img[@alt="TEST TEXT"])
Ich verzweifle :/ Könnte mir jemand erklären, wie man sowas bewerkstelligt? :mrgreen:

Stefan
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
BlackJack

@StefanLawl: Wenn ich das richtig verstanden habe, möchtest Du nach `img`-Tags mit dem `title`-Attributwert 'TEST TEXT' suchen. Und dort dann ein Element höher das `href`-Attribut auslesen. Eine Ebene höher kommt man wie bei den meisten Dateisystemen mit ``..``:

Code: Alles auswählen

In [23]: node.xpath('//img[@title="TEST TEXT"]')
Out[23]: [<Element img at 0x2404b70>]

In [24]: node.xpath('//img[@title="TEST TEXT"]/..')
Out[24]: [<Element a at 0x2404a80>]

In [25]: node.xpath('//img[@title="TEST TEXT"]/../@href')
Out[25]: ['url.html']
Benutzeravatar
StefanLawl
User
Beiträge: 92
Registriert: Donnerstag 7. Juni 2012, 20:23

Mist, danke! Ich habe von ".." gelesen, dachte aber man müsste es wie folgt verwenden:

Code: Alles auswählen

/..img[@title=[TEST TEXT]
Und das hat immer Fehler hervorgefunden.

Vielen Dank! :)
Man sagt uns wir sollen der Idee gedenken und nicht des Mannes. Denn ein Mensch kann versagen. Er kann gefangen werden. Er kann getötet und vergessen werden. Aber 400 Jahre später kann eine Idee immer noch die Welt verändern.
-V
Antworten