使用 HTTP 缓存进行开发

网络爬虫的开发是一个探索的过程,并且将迭代各种改进以检索所请求的信息。 在开发过程中,您经常会一遍又一遍地访问远程服务器以及这些服务器上的相同 URL。 这不礼貌。 幸运的是,scrapy 还提供了专门为解决这种情况而设计的缓存中间件来解决这一问题。

如何做

Scrapy 会使用名为 HttpCacheMiddleware 的中间件模块来缓存请求。只需将 HTTPCACHE_ENABLED 设置为 True 即可启用:

process = CrawlerProcess({
    'AUTOTHROTTLE_TARGET_CONCURRENCY': 3
})
process.crawl(Spider)
process.start()

工作原理

HTTP 缓存的实现既简单又复杂。Scrapy 提供的 HttpCacheMiddleware 可根据你的需要提供大量配置选项。归根结底,就是将每个 URL 及其内容存储在一个存储空间中,并设定相关的缓存过期时间。如果在过期时间内再次请求 URL,则将检索本地副本,而不是进行远程请求。如果时间已过,则会从网络服务器获取内容,存储到缓存中,并设置新的过期时间。

还有更多

配置 scrapy 缓存有很多选项,包括存储内容的方式(文件系统、DBM 或 LevelDB)、缓存策略以及如何处理来自服务器的 Http Cache-Control 指令。要探索这些选项,请查看以下 URL: https://doc.scrapy.org/en/latest/topics/downloader-middleware.html?_ga=2.50242598.1404351387.1507758575-507079265.1505263737#dummy-policy-default.