Я экспортирую данные из элемента в файл json с помощью srapy jsonitemexporter. Теперь я хотел бы добавить в файл некоторую основную информацию о данных, например имя партнера или имя страницы.
Помещение этого кода в
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 перед началом экспорта элементов, чтобы позже при обработке данных можно было определить, например. источник.
Как лучше всего этого добиться?






Здесь ошибка довольно очевидна:
a bytes-like object is required, not '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 при записи байтов (например, данных изображения).