2016-04-20 5 views
1

Ich habe Daten zu kriechen mit Scrapy wie folgt aus:Verwenden mehrerer XPaths in Scrapy Selector

<div class="data" 
    data-name="{"id":"566565", "name":"data1"}" 
    data-property="{"length":"444", "height":"678"}" 
> 
    data1 
</div> 
<div class="data" 
    data-name="{"id":"566566", "name":"data2"}" 
    data-property="{"length":"555", "height":"777"}" 
> 
    data2 
</div> 

Ich brauche data-name und data-property Attribute. Meine Wähler ist:

selections = Selector(response).xpath('//div[@class="data"]/attribute::data-property').extract() 

Wie kann ich data-name Attribut in Auswahlen enthalten?

Antwort

1

Die folgende XPath sollte data-property und data-name Attribute zurückgeben:

//div[@class='data']/attribute::*[name()='data-property' or name()='data-name'] 

XPath Demo: http://www.xpathtester.com/xpath/e720602b62461f3600989be73eb15aec


Wenn Sie die beiden Attribute als ein Paar in einem bestimmten Format für jeden Elternteil zurückkommen müssen div, dann kann dies nicht mit reinem XPath 1.0 durchgeführt werden. Einige Python wäre erforderlich, möglicherweise mit Liste Verständnis (nicht getestet):

selections = [div.xpath('concat(@data-property, " ", @data-name)').extract() \ 
        for div in Selector(response).xpath('//div[@class="data"]')] 
+0

'Data-Name' nicht enthalten. – TheNone

+0

Ich muss 2 Auswahl in einem zusammenführen (Auswahl) – TheNone

+0

@TheNone, die nicht mit reinem XPath 1 durchgeführt werden kann. Siehe aktualisierte Antwort. Das Beispiel wird die Verkettung der beiden Attribute für jedes "div" zurückgeben – har07