You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scrapy如何仅对网站特定不变URL开启缓存功能?

Scrapy 按需缓存特定URL页面的实现方案

你可以通过两种核心方式实现按需缓存,根据你的URL格式规则灵活选择:

方法一:自定义全局缓存策略类

通过重写Scrapy的默认缓存策略,全局控制哪些URL需要缓存。

  1. 在项目中新建一个缓存策略文件,比如cache_policy.py,写入以下代码:
from scrapy.extensions.httpcache import DefaultPolicy
import re

# 替换成你实际的静态URL匹配规则
STATIC_URL_PATTERN = re.compile(r'/fixed-content/.*')
# 替换成你实际的动态URL匹配规则
DYNAMIC_URL_PATTERN = re.compile(r'/updated-content/.*')

class CustomCachePolicy(DefaultPolicy):
    def should_cache_request(self, request):
        # 匹配静态URL则允许缓存
        if STATIC_URL_PATTERN.match(request.url):
            return True
        # 匹配动态URL则禁止缓存
        elif DYNAMIC_URL_PATTERN.match(request.url):
            return False
        # 其他URL沿用默认缓存逻辑(可选保留)
        return super().should_cache_request(request)
  1. 在项目的settings.py中配置使用自定义策略:
HTTPCACHE_ENABLED = True
HTTPCACHE_POLICY = '你的项目名称.cache_policy.CustomCachePolicy'

方法二:爬虫内动态控制请求缓存属性

在生成Request时,根据URL格式手动设置缓存开关,适合局部灵活调整的场景。

示例代码(在爬虫的parse方法中):

import re
from scrapy import Request

# 替换成你的静态URL匹配规则
STATIC_URL_PATTERN = re.compile(r'/fixed-content/.*')

def parse(self, response):
    # 遍历页面中的待爬URL
    for url in response.css('a::attr(href)').getall():
        if STATIC_URL_PATTERN.match(url):
            # 静态URL正常走缓存逻辑
            yield Request(url, callback=self.parse_detail_page)
        else:
            # 动态URL强制跳过缓存,直接请求服务器
            yield Request(url, callback=self.parse_detail_page, meta={'dont_cache': True})

注意事项

  • 正则表达式要根据你实际的URL格式调整,确保精准匹配两类URL
  • 自定义策略类的路径要配置正确,保证Scrapy能找到该类
  • dont_cache参数优先级高于全局缓存策略,适合处理特殊场景的URL

内容的提问来源于stack exchange,提问作者jgklsdjfgkldsfaSDF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 19:37:08