我在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。
答案 0 :(得分:2)
S3 feed存储选项继承自BlockingFeedStorage
,它本身使用TemporaryFile(prefix='feed-')
(来自tempfile模块)
默认目录是从平台相关列表中选择的
您可以继承S3FeedStorage
并覆盖open()
方法以从默认值以外的其他位置返回临时文件,例如使用dir
的{{1}}参数