在上传到S3之前,在使用S3 FEED_URI时,scrapyd会在哪里写入抓取结果?

时间:2016-02-15 19:50:48

标签: scrapy scrapyd

我在Amazon EC2实例上使用scrapyd和scrapy 1.0.3运行长时间的网络爬网。我在我的spider / settings.py文件中使用这些参数将jsonlines文件导出到S3:

FEED_FORMAT: jsonlines FEED_URI: s3://my-bucket-name

我的scrapyd.conf文件将items_dir属性设置为空:

items_dir=

将items_dir属性设置为空的原因是scrapyd不会覆盖蜘蛛设置中的FEED_URI属性,该属性指向s3桶(请参阅Saving items from Scrapyd to Amazon S3 using Feed Exporter)。

这在大多数情况下都按预期工作,但我遇到了一个特别大的爬网问题:本地磁盘(不是特别大)填充正在进行的爬网数据才能完全完成,因此在结果可以上传到S3之前。

我想知道是否有任何方法可以配置在上传到S3之前可以写入此爬行的“中间”结果的位置?我假设Scrapy内部代表正在进行的抓取数据并不完全保存在RAM中,而是放在磁盘上的某个地方,如果是这样的话,我想将该位置设置为具有足够空间的外部安装将完成的.jl文件发送到S3之前的结果。为“items_dir”指定值可防止scrapyd在完成时自动将结果上传到s3。

1 个答案:

答案 0 :(得分:2)

S3 feed存储选项继承自BlockingFeedStorage,它本身使用TemporaryFile(prefix='feed-')(来自tempfile模块)

  

默认目录是从平台相关列表中选择的

您可以继承S3FeedStorage并覆盖open()方法以从默认值以外的其他位置返回临时文件,例如使用dir的{​​{1}}参数