gpt4 book ai didi

python - 如何为不同的蜘蛛设置相同的缓存文件夹,现在scrapy在缓存目录中为每个蜘蛛创建子文件夹

转载 作者:行者123 更新时间:2023-12-01 09:13:38 25 4
gpt4 key购买 nike

我有在同一域上运行的蜘蛛,第二个蜘蛛的运行取决于第一个蜘蛛的结果,我希望它们共享缓存信息,但在缓存文件夹中,它们创建带有蜘蛛名称的子文件夹,是否可以为它们设置相同的文件夹?也许scrapy有缓存,不为不同的蜘蛛使用不同的文件夹(并且支持像'scrapy.extensions.httpcache.FilesystemCacheStorage'这样的压缩?看起来levelDB和DBM也使用蜘蛛名称来表示某些“子文件夹”的软件)

此外,如果我以某种方式这样做,可以通过删除 os.path 中的 Spider.name 加入 httpcache.py 中的 FilesystemCacheStorage (或将其更改为 scrapy 项目名称):

    def _get_request_path(self, spider, request):
key = request_fingerprint(request)
return os.path.join(self.cachedir, spider.name, key[0:2], key)

任何元/蜘蛛特定信息都不会阻止它们重用缓存信息吗?

长读版本(也许我的方法根本不好):或者也许我做错了,对于来自域的链接的某些交叉点的​​多次运行,我应该考虑使用管道?我抓取:

spider1 中的menu_1/subelements_1/subelements_1_2/items_set_1

然后

spider2中的menu_2/subelements_2/subelements_2_2/items_set_2,

但 items_set_1 与大约 40% 的 items_set_2 互连(即相同的项目,如 universal_item_id 相同),在这种情况下,我不需要 items_set_2 中的它们(来自 items_set_1 的项目),而且我发现我不需要在spider2中不需要这个项目,因为spider1有这个数据,只有当我最终获得项目时,所以我有一个包含spider1的300mb gzipped缓存数据的文件夹,以及spider2的gzipped缓存数据(我喜欢:“哦,我们有items_set_1 中的这个 universal_item_id,所以我们不会在 Spider2 中生成该项目”),我从它下载了两次约 40% 的空间。因为它们缓存在不同的子文件夹中。

最佳答案

您应该尝试仅子类化 scrapy.extensions.httpcache.FilesystemCacheStorage 并覆盖 _get_request_path 以使用单个文件夹(请参阅此处的示例 https://github.com/scrapy-plugins/scrapy-splash/blob/master/scrapy_splash/cache.py )。默认缓存请求指纹不考虑元,仅考虑 url/body/method 和我相信 header ,但前提是配置为这样做,而不是默认情况下。

不要忘记在 HTTPCACHE_STORAGE 配置中指定您的类。

关于python - 如何为不同的蜘蛛设置相同的缓存文件夹,现在scrapy在缓存目录中为每个蜘蛛创建子文件夹,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51432471/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com