Неправильное форматирование JSON (scrapy) - PullRequest
0 голосов
/ 05 апреля 2020

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

что-то вроде

[{'companyId': 1,
                                              'companyPhotoId': 9120,
                                              'description': 'Pracovní '
                                                             'prostory',
                                              'fileId': '4ec99adf-f89b-481d-8f6d-3d2f49b1f1f1',
                                              'isThumbHorizontal': False,
                                              'order': 1,
                                              'thumbnailFileId': 'e00c3c9c-55d3-4bad-bd5a-d485bfab2986'},
                                             {'companyId': 1,
                                              'companyPhotoId': 9121,
                                              'description': 'mDevcamp 2018',
                                              'fileId': '089dfef5-5c89-4e56-ad49-c6458d258a3f',
                                              'isThumbHorizontal': False,
                                              'order': 2,
                                              'thumbnailFileId': '411cbd66-dbb4-4385-8ae9-cc89f8787346'},
                                             {'companyId': 1,
                                              'companyPhotoId': 9122,
                                              'description': 'Kancl 2018',
                                              'fileId': 'fcdadaeb-3960-45be-b575-0a0be34a73bc',
                                              'isThumbHorizontal': True,
                                              'order': 3,
                                              'thumbnailFileId': '7cd162e9-1d18-4629-b685-9b4246637fef'}]
import scrapy
from pprint import pprint
import json

class Project1SpiderSpider(scrapy.Spider):
    name = 'project1-spider'
    allowed_domains = ['somewebsite']
    start_urls = ['somewebsite'.format(i + 1) for i in range(2000)]

    def parse(self, response):
        results = json.loads(response.body)
        pprint(results)

мне нужно получить его в таком формате

[{"companyId": 1,
                                              "companyPhotoId": 9120,
                                              "description": "Pracovní "
                                                             "prostory",
                                              "fileId": "4ec99adf-f89b-481d-8f6d-3d2f49b1f1f1",
                                              "isThumbHorizontal": False,
                                              "order": 1,
                                              "thumbnailFileId": "e00c3c9c-55d3-4bad-bd5a-d485bfab2986"},
                                             {"companyId": 1,
                                              "companyPhotoId": 9121,
                                              "description": "mDevcamp 2018",
                                              "fileId": "089dfef5-5c89-4e56-ad49-c6458d258a3f",
                                              "isThumbHorizontal": False,
                                              "order": 2,
                                              "thumbnailFileId": "411cbd66-dbb4-4385-8ae9-cc89f8787346"},
                                             {"companyId": 1,
                                              "companyPhotoId": 9122,
                                              "description": "Kancl 2018",
                                              "fileId": "fcdadaeb-3960-45be-b575-0a0be34a73bc",
                                              "isThumbHorizontal": True,
                                              "order": 3,
                                              "thumbnailFileId": "7cd162e9-1d18-4629-b685-9b4246637fef"}]

Не могли бы вы помочь мне, как должен выглядеть код вместо этого, пожалуйста.

Большое спасибо

1 Ответ

0 голосов
/ 05 апреля 2020

Когда вы делаете json.loads(response.body), он конвертирует из json строки в python объект. И вы получили результат, потому что вы печатаете объект python.

Чтобы получить желаемый результат, вы должны либо распечатать оригинал json: print(response.body), либо, если вы хотите правильно напечатать его, вам следует преобразовать объект python в строку json с отступом, т.е. print(json.dumps(results, indent=2)).

    def parse(self, response):
        # Get a python object
        results = json.loads(response.body)
        # Pretty print the json
        print(json.dumps(results, indent=2))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...