我有蜘蛛在同一域上运行,第二个蜘蛛在运行,这取决于第一个蜘蛛的结果,我希望它们共享缓存信息,但是它们在缓存文件夹中创建带有蜘蛛名称的子文件夹,是否可以为它们设置相同的文件夹?也许scrapy具有缓存,不为不同的蜘蛛使用不同的文件夹(并支持压缩,例如'scrapy.extensions.httpcache.FilesystemCacheStorage'?好像levelDB和DBM也使用蜘蛛名称来实现一些“子文件夹”的功能)
另外,如果我以某种方式这样做,可以通过删除os.path中的spider.name来连接FilecacheCache的httpcache.py中的join(或将其更改为scrapy项目名称):
def _get_request_path(self, spider, request):
key = request_fingerprint(request)
return os.path.join(self.cachedir, spider.name, key[0:2], key)
是否不会有任何特定于meta / spider的信息会阻止它们重复使用缓存信息?
长读版本(也许我根本没有什么不好的方法):或者我做错了,对于域中链接的某些交叉点的多次运行,我应该考虑使用管道吗?
我刮了一下:
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中的item,因为只有当我最终得到item时,spider1才拥有此数据,因此我为该文件夹提供了300mb的Spider1压缩缓存数据和Spider2的缓存压缩数据(而且我喜欢:“哦,我们有这个Universal_item_id items_set_1,因此我们不会在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和我相信的标头,但仅在配置为这样做的情况下才考虑,默认情况下不如此。
不要忘记在HTTPCACHE_STORAGE
配置中指定您的班级。
关于python - 如何为不同的蜘蛛设置相同的缓存文件夹,现在抓取为每个蜘蛛在缓存目录中创建子文件夹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/51432471/