2016-03-28 35 views
1

Ich benutze Python mit Xpath und bin in der Xpath-Syntax verloren. Was ich tun möchte, ist zu überprüfen, ob es in einer Tabelle in einer HTML-Seite kein Tag gibt. Also verwende ich xpath, um dies zu tun. Wenn es dieses Tag nicht gibt, führen Sie eine Xpath-Suche relativ zum Abschnitt durch. Es scheint, als ob etwas funktioniert, aber es macht das Gegenteil und kann nicht herausfinden warum. Beispielcode ist unten.Xpath - Suche in XPath-Ergebnissen

main_sections = tree.xpath('//td[@class="cars"]') 

for i in range(0, len(main_sections)): 
    has_no_flag = True 
    for c in main_sections[i].getchildren(): 
     if c.tag == "span" and c.get("class") == "colorRed": 
      has_no_flag = False 

if has_no_flag: 
    price = main_sections[i].xpath('//td[@class="cars"]/following-sibling::td[@class="price"]/span[@class="amount-value"]') 
    price_str = price[0].text.strip() 

Ich glaube nicht, dass der Xpath für den Preis korrekt ist. Hoffentlich wird jemand in der Lage sein, mich zu erleuchten :)

+0

würden Sie den HTML-Code in Frage dagegen teilen, können wir keine Annahmen über die genaue Struktur des Dokuments – danidee

Antwort

2

Ich denke nicht, dass Sie XPath hier richtig verwenden.

Filtern Sie einfach die Knoten, die Sie haben möchten und werfen Sie Ihre eigenen Schleifen und Flags.

cars_without_tag_price = '''//td[ 
    @class="cars" and not(span[@class="colorRed"]) 
]/following-sibling::td[@class="price"]/span[@class="amount-value"] 
''' 

for price_node in tree.xpath(cars_without_tag_price): 
    price_str = price_node.text.strip() 
+0

Holy Moly machen! Danke - Ich hätte nicht gedacht, dass XPath das tun könnte. Nur noch eine Frage - was bedeuten die empty Strings am Anfang und Ende der xpath string? – area9

+0

Sie würden überrascht sein, was XPath tun kann, wenn es darum geht, bestimmte Knoten aus einem Baum auszuwählen. Es lohnt sich wirklich, über die Grundlagen hinaus zu lernen. - In diesem Codebeispiel sind keine leeren Zeichenfolgen vorhanden. Dreifache Anführungszeichen sind Pythons, um mehrzeilige Zeichenfolgen zu markieren. – Tomalak

+0

ahh ja. vergaß dies. Sie können mir sagen, dass ich momentan ein Anfänger bin :) – area9