scrapy自定义保存数据为json格式文件过程的疑惑

如下代码,自定义保存为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在写入数据时,现将数据存储在哪里,直到达到一定程度时才执行写入操作吗?还有就是能实现批量写入吗?

阅读 2.5k
1 个回答
self.file.write(line)
self.file.flush() # 立即写入

根json没关系,是codecs的缓存,不立即写入只有等关闭或者缓存满才写入

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题