Scrapy FilesPipeline避免在不同的爬网运行中重新下载文件(谷歌云存储)



我知道这里有一个关于这个的问题(如何避免在Scrapy中将媒体重新下载到S3?(但我还没有答案

我设计了一个带有FilesPipeline的蜘蛛,可以从几个网站获取pdf文件。

我知道FilesPipeline类使用GCSFilesStore和函数media_to_download来比较bloblast_modified属性日期与当前时间的过期持续时间(以天为单位((EXPIRES最初等于90(重点是,我希望能够不时地启动我的蜘蛛,并且只下载新的文档

然而,当我第二次运行我的spider时,它会再次重新下载所有文件

我试着增加EXPIRES参数,但似乎没有减少。

感谢您的帮助!

更新:

我认为这是一个来自scratch的bug。我在github上提交了一份错误报告,解释了如何复制这个

这似乎是由于bucket的一些权限配置造成的。以下是github用户@michalp123的答案:

区块报价我无法复制这个bug@lblanche,你确定你正确设置了bucket的权限吗?我第一次尝试复制它时,我得到了一个设置,其中我使用的服务帐户具有写入权限,但由于某种原因,在bucket上调用get_blob引发了403,这导致GCSFilesStore中的stat_file方法失败,并导致每次都下载该文件。在修复权限后,一切都正常工作。如果是这种情况,我认为最好检查GCSFilesStore的init中的权限,如果无法从bucket中获取文件的元数据,则显示警告。

同一用户合并了一个修复程序,如果不允许访问元数据,该修复程序会在GCSFilesStoreinit处添加警告。

最新更新