我正在使用srapy的jsonitemexporter将数据从项目导出到json文件。现在我想在文件中添加一些有关数据的基本信息,例如合作伙伴名称或页面名称。
将此代码放入
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 文件添加一些信息,以便稍后在处理数据时可以确定例如来源。
实现这一目标的最佳方法是什么?
这里有一个错误是不言自明的:
需要类似字节的对象,而不是"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