Как добавить пользовательскую информацию в файл json с помощью scrapy в python - PullRequest
0 голосов
/ 05 декабря 2018

Я экспортирую данные из элемента в файл json с помощью jsonitemexporter srapy.Теперь я хотел бы добавить некоторую основную информацию о данных в файл, например, имя партнера или имя_папки.

Вставка этого кода в

class BidPipeline(object):

file = None

def open_spider(self, spider):
    self.file = open('data/'+  datetime.datetime.now().strftime ("%Y%m%d") + '_' + spider.name + '.json', 'wb')
    self.exporter = JsonItemExporter(self.file)

    # trying to add partner info        
    a = {'partner': 3}
    line = json.dumps(a) + "\n"
    self.file.write(line)

    self.exporter.start_exporting()

Результат в трассировке:

yield self.engine.open_spider(self.spider, start_requests)
builtins.TypeError: a bytes-like object is required, not 'str'

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

Каков наилучший способ достиженияэто?

1 Ответ

0 голосов
/ 06 декабря 2018

Здесь ошибка довольно очевидна:

требуется объект, похожий на байты, а не 'str'

Вы открываете файл для записи байтов (wb) и вы пытаетесь написать строку:

def open_spider(self, spider):
    self.file = open(..., 'wb')
                          ^^^^^
    ...
    a = {'partner': 3}
    line = json.dumps(a) + "\n"
                           ^^^^
    self.file.write(line)

Чтобы решить эту проблему, либо откройте файл как строковый файл (просто w вместо wb), либо закодируйте свою строку перед записью в файл:

    self.file.write(line.encode())

Желательно всегда использовать w при записи текста и wb при записи байтов (например, данных изображения)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...