2017-08-27 26 views
0

我想用Scrapy刮一個JSON響應。我想知道是否可以在JSON中找到嵌套值「Metro」並在該hiearchy內拉動「距離」的通配符路徑。Scrapy json響應:通配符和刮參考

在JSON中,有幾個poi對象,但我只對Metro地鐵有興趣,而且對Metro的距離感興趣。請看下面的例子,我想刮。

我嘗試使用以下代碼,但它不起作用,因爲通配符不起作用,並且引用不正確。我習慣於XPATH抓取,所以希望有一些簡單的方法來做到這一點?

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

完整的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

後一個完整的JSON樣本 –

回答

0

如果你想要一個班輪,比你可以用這個去:

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