scrapinghub:DeltaFetch 和 HTTPCACHE_ENABLED 的区别
scrapinghub: Difference DeltaFetch and HTTPCACHE_ENABLED
我很难理解 DeltaFetch 和 HttpCacheMiddleware 之间的区别。两者的目标都是我只抓取以前没有请求过的页面?
HTTP 缓存中间件将页面保存在本地,以便下次请求它们的 URL 时,响应将从磁盘而不是网络加载。您从网络速度切换到磁盘速度。
阅读README后,我认为scrapy-deltafetch不会从磁盘加载之前的请求,而是完全忽略它们。
如果您抓取半个网站,停止,然后他们恢复蜘蛛,第二次缓存方法将从头开始解析所有内容(访问的内容只会加载得更快),而 deltafetch 只会解析剩余的一半。
他们的目的截然不同:
- HttpCacheMiddleware
每次发出新请求时,它都会获取该数据并将其保存在本地。每次再次发出相同的请求时,它都会从磁盘(因此是本地缓存)中获取。
这对于开发非常有用,当您可能想要多次获取同一页面时,直到您的脚本正常工作并正确保存您想要的数据。使用此功能,您只需从 remote/origin 服务器获取页面一次。
但是,如果数据发生变化,您将使用旧副本(这通常适合开发用途)。
- DeltaFetch
Deltafetch 保留所有已被提取并转化为项目(或字典)的请求的指纹。如果爬虫输出的是以前见过的请求,会被忽略
这在生产环境中很有用,当一个站点有多个指向相同内容的链接时,可以避免请求重复的项目。
DeltaFetch 假定 requests/links 和项目之间存在一对一的关系。因此,如果您从同一个请求中抓取多个项目,这可能会出现问题,因为在从该请求中获取第一个项目后,所有请求都将被忽略(这是一个有点复杂的极端情况)。
- DUPEFILTER_CLASS(未提及但类似)
默认情况下,scrapy 不会获取重复的请求。您可以自定义 "duplicate requests" 的含义。例如,在比较请求时,可能应该忽略 url 的查询部分。
我很难理解 DeltaFetch 和 HttpCacheMiddleware 之间的区别。两者的目标都是我只抓取以前没有请求过的页面?
HTTP 缓存中间件将页面保存在本地,以便下次请求它们的 URL 时,响应将从磁盘而不是网络加载。您从网络速度切换到磁盘速度。
阅读README后,我认为scrapy-deltafetch不会从磁盘加载之前的请求,而是完全忽略它们。
如果您抓取半个网站,停止,然后他们恢复蜘蛛,第二次缓存方法将从头开始解析所有内容(访问的内容只会加载得更快),而 deltafetch 只会解析剩余的一半。
他们的目的截然不同:
- HttpCacheMiddleware
每次发出新请求时,它都会获取该数据并将其保存在本地。每次再次发出相同的请求时,它都会从磁盘(因此是本地缓存)中获取。
这对于开发非常有用,当您可能想要多次获取同一页面时,直到您的脚本正常工作并正确保存您想要的数据。使用此功能,您只需从 remote/origin 服务器获取页面一次。
但是,如果数据发生变化,您将使用旧副本(这通常适合开发用途)。
- DeltaFetch
Deltafetch 保留所有已被提取并转化为项目(或字典)的请求的指纹。如果爬虫输出的是以前见过的请求,会被忽略
这在生产环境中很有用,当一个站点有多个指向相同内容的链接时,可以避免请求重复的项目。
DeltaFetch 假定 requests/links 和项目之间存在一对一的关系。因此,如果您从同一个请求中抓取多个项目,这可能会出现问题,因为在从该请求中获取第一个项目后,所有请求都将被忽略(这是一个有点复杂的极端情况)。
- DUPEFILTER_CLASS(未提及但类似)
默认情况下,scrapy 不会获取重复的请求。您可以自定义 "duplicate requests" 的含义。例如,在比较请求时,可能应该忽略 url 的查询部分。