2017-08-27 1 views
0

Ich versuche, eine JSON-Antwort mit Scrapy zu kratzen. Ich habe mich gefragt, ob es möglich ist, einen Platzhalterpfad in einem JSON zu scrappen, der den verschachtelten Wert "Metro" findet und die "Entfernung" innerhalb dieser Hierarchie zieht.Scrapy JSON Antwort: Wildcards und Scraping Referenzen

In der JSON gibt es mehrere Poi-Objekte, aber ich interessiere mich nur für die Metro eins, und die Entfernung zur Metro. Siehe unten für das Beispiel, das ich versuche zu kratzen.

Ich versuchte mit dem folgenden Code, aber es funktioniert nicht, da der Platzhalter nicht funktioniert und die Referenz falsch ist. Ich bin XPATH Scraping gewohnt, hoffe also, dass es einen einfachen Weg gibt, dies zu tun?

loader.add_value('Metro', jsonresponse["poi"][*][["name"]== "Metro"]["distance"]) 

Der vollständige JSON:

"poi":[ 
     { 
     "distance":1469.0, 
     "description":"Station", 
     "walkDistance":1948, 
     "url":"", 
     "lon":14, 
     "time":1890, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/263", 
     "name":"Metro" 
     }, 
     { 
     "distance":2163.0, 
     "description":"Station", 
     "walkDistance":4371, 
     "url":"", 
     "lon":14, 
     "time":4200, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/155", 
     "name":"Tram" 
     }, 
     { 
     "distance":33.0, 
     "description":"Station", 
     "walkDistance":40, 
     "url":"", 
     "lon":14, 
     "time":36, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/198", 
     "name":"Bus MHD" 
     }, 
     { 
     "distance":1413.0, 
     "description":"Station", 
     "walkDistance":2615, 
     "url":"", 
     "lon":14, 
     "time":2382, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/169", 
     "name":"Vlak" 
     }, 
     { 
     "distance":487.0, 
     "description":"Bankomat", 
     "walkDistance":968, 
     "url":"url", 
     "lon":14, 
     "time":943, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/28", 
     "name":"Bankomat" 
     }, 
     { 
     "distance":473.0, 
     "description":"Station", 
     "walkDistance":614, 
     "url":"url", 
     "lon":14, 
     "time":574, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/122", 
     "name":"Police" 
     }, 
     { 
     "distance":188.0, 
     "description":"Station", 
     "walkDistance":250, 
     "url":"url", 
     "lon":14, 
     "time":253, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/72", 
     "name":"Apothecary" 
     }, 
     { 
     "distance":286.0, 
     "description":"Station", 
     "walkDistance":400, 
     "url":"url", 
     "lon":14, 
     "time":381, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/144", 
     "name":"Sport" 
     }, 
     { 
     "distance":286.0, 
     "description":"Station", 
     "walkDistance":400, 
     "url":"url", 
     "lon":14, 
     "time":381, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/133", 
     "name":"Restaurant" 
     }, 
     { 
     "distance":64.0, 
     "description":"Station", 
     "walkDistance":233, 
     "url":"url", 
     "lon":14, 
     "time":216, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/423", 
     "name":"Supermarket" 
     }, 
     { 
     "distance":168.0, 
     "description":"Station", 
     "walkDistance":320, 
     "url":"url", 
     "lon":14, 
     "time":295, 
     "lat":50, 
     "imgUrl":"https://api.mapy.cz/poiimg/icon/142", 
     "name":"School" 
     } 
+0

Stellen Sie eine komplette json Probe –

Antwort

0

Wenn Sie einen Einzeiler wollen, als Sie mit diesem gehen kann:

distance = [x['distance'] for x in jsonresponse['poi'] if x['name'] == 'Metro'][0]