Как установить пару ключ-значение для вывода json в scrapy?

#python #json #web-scraping #scrapy

#python #json #веб-очистка #scrapy

Вопрос:

 [{"Definition": ["Hello World."], "Fast": ["10"], "Free": ["Yes"], "Name": ["Hello"], "Movement": ["Fine"]}]
  

После обхода веб-сайта с помощью этой команды :

 scrapy crawl hello -o helloworld.json -t json   
  

Я получаю вышеуказанный форматированный вывод. Я хочу, чтобы значение имени присутствовало как имя массива json, чтобы вывод выглядел следующим образом

 {"Hello": {"Definition": ["Hello World"],"Fast": ["10"],"Free": ["Yes"], "Movement": ["Fine"]}
  

Возможно ли это сделать в scrapy?

Ответ №1:

Вы можете сделать:

 >>> a = [{"Definition": ["Hello World."], "Fast": ["10"], "Free": ["Yes"], "Name": ["Hello"], "Movement": ["Fine"]}]
>>> b = {a[0]['Name'][0]:a[0].copy()} # copy optional
del b[a[0]['Name'][0]]['Name']
>>> b
{'Hello': {'Definition': ['Hello World.'], 'Fast': ['10'], 'Free': ['Yes'], 'Movement': ['Fine']}}
  

Редактировать в ответ на ваш комментарий:

 >>> a = [{"Definition": ["Hello World."], "Fast": ["10"], "Free": ["Yes"], "Name": ["Hello"], "Movement": ["Fine"]}]
>>> b = {a[0]['Name'][0]:{k:v[0] for k,v in a[0].items()}}
>>> del b[a[0]['Name'][0]]['Name']
>>> b
{'Hello': {'Definition': 'Hello World.', 'Fast': '10', 'Free': 'Yes', 'Movement': 'Fine'}}
  

Комментарии:

1. Спасибо. Что, если я хочу сделать это в своем классе spider, чтобы мне не приходилось писать коды для отдельного файла json.

2. @Rahul Можете ли вы написать функцию для этого кода и включить ее в свой класс?

3. Видите ли, дело в том, что после запуска сканера я получаю этот вывод в формате json. Я не понимаю, как я могу это сделать, не получая выходных данных.

4. Я полагаю, что понимаю. Итак, вам нужна программа на Python, в которую вы можете передавать выходные данные, что даст вам желаемый результат? Или вы сохраняете исходные выходные данные в файле?

5. Ну, я сохраняю исходные выходные данные в файл json, но я хочу, чтобы он был в том формате, который я указал. Первый вывод является оригинальным. Я хочу манипулировать этим, чтобы я мог получить желаемый результат.