如下代码,自定义保存为json文件,运行scrapy时,中途暂停程序的运行查看写入的数据,(数据量小时)发现json文件内容为空,或者是(数据量大时)不及时(不同步)写入数据。
但是,整个程序运行完成后,json文件却写入了数据,在此期间我也暂停查看了几次,json文件不能及时写入数据。
于是我测试了数据写入过程,如下代码:
class JsonEncodingPipeline(object):
def __init__(self):
print('start writing in files...')
self.file = codecs.open('jianshu.json', 'a+', encoding='utf-8')
def process_item(self, item, spider):
print('writing...')
line = json.dumps(dict(item), ensure_ascii=False) + "\n"
self.file.write(line)
return item
def spider_closed(self, spider):
print('ok,file is closed...')
self.file.close()
运行时显示如下,数据确实是写入了,但json文件打开还是无内容。
想请教各位大神,为什么会出现这样的情况?还是说scrapy在写入数据时,现将数据存储在哪里,直到达到一定程度时才执行写入操作吗?还有就是能实现批量写入吗?
根json没关系,是codecs的缓存,不立即写入只有等关闭或者缓存满才写入