我实施了一个Scrapy项目,现在在本地工作正常。使用crawl命令,如果文件存在,每个蜘蛛将它的jsonlines附加到同一文件。当我使用boto将feed导出器更改为S3时,它现在用最后一次运行spider的数据覆盖整个文件,而不是附加到文件。
有没有办法让Scrapy / boto / S3将jsonlines追加到文件中,就像在本地一样?
由于
答案 0 :(得分:2)
无法在S3中追加文件。您可以在S3存储桶上启用版本控制,然后每次将文件写入S3时,它都会创建该文件的新版本。然后,您可以使用boto Bucket对象的list_versions方法检索文件的所有版本。
答案 1 :(得分:1)
通过阅读Feed导出器代码(https://github.com/scrapy/scrapy/blob/master/scrapy/contrib/feedexport.py),文件导出器以附加模式打开指定文件,而S3导出器调用set_contents_from_file
,这可能会覆盖原始文件。
boto S3文档(http://boto.readthedocs.org/en/latest/getting_started.html)未提及能够修改存储文件,因此唯一的解决方案是创建一个自定义导出器,该导出器存储可以先附加到结果的本地结果副本将该文件复制到S3。