2016-04-01 2 views
0

Я пытаюсь написать веб-приложение, которое сканирует информацию из магазина Sony PlayStation. Я нашел файл JSON, у которого есть данные, которые я хочу, но мне интересно, как использовать Scrapy для хранения только определенных элементов файла JSON?Использование Scrapy для очистки вложенных данных JSON?

Вот часть данных JSON:

{ 
    "age_limit":0, 
    "attributes":{ 
     "facets":{ 
      "platform":[ 
       {"name":"PS4™","count":96,"key":"ps4"}, 
       {"name":"PS3™","count":5,"key":"ps3"}, 
       {"name":"PS Vita","count":7,"key":"vita"}, 
      ] 
     } 
    } 
    } 

Я только хочу, чтобы «считать» значение для «имя» PS4. Как я могу получить это в Scrapy? Вот мой код Scrapy:

from scrapy.spider import BaseSpider 
from scrapy.selector import HtmlXPathSelector 
from crossbuy.items import PS4Vita 


class PS4VitaSpider(BaseSpider): 
    name = "ps4vita" # Name of the spider, to be used when crawling 
    allowed_domains = ["store.playstation.com"] # Where the spider is allowed to  go 
    start_url = "https://store.playstation.com/chihiro-api/viewfinder/US/en/999/STORE-MSF77008-9_PS4PSVCBBUNDLE?size=30&gkb=1&geoCountry=US" 

    def parse(self, response): 
     jsonresponse = json.loads(response) 

     pass # To be changed later 

Спасибо!

+0

Разве вы не можете просто получить доступ к { "имя": «PS4}?. В обычном порядке, например,' [р [ «count»] для p в jsonresponse ["attributes"] ["facets"] ["platform"], если p ["name"] == "PS4 ™"] '? – Anzel

ответ

1
... 
def parse(self, response): 
    jsonresponse = json.loads(response.body) 
    my_count = None 
    for platform in jsonresponse['attributes']['facets']['platform']: 
     if 'PS4' in platform['name']: 
      my_count = platform['count'] 

    yield dict(count=my_count) 
... 
0

Просто доступ к данным JSON, как вы бы словарь питона:

# To get a list of the counts: 
counts = [x['count'] for x in jsonresponse['attributes']['facets']['platform']] 
Смежные вопросы