Caching 如何在scrapy中禁用缓存?

Caching 如何在scrapy中禁用缓存?,caching,scrapy,Caching,Scrapy,我正在尝试对特定网站上的网页进行爬网。对于我通过scrapy.Request()发送的不同cookie集,该网页略有不同 如果我一个接一个地请求网页,它会给我正确的结果,但当我将这些cookies发送到for循环中时,它会给我相同的结果。我认为scrapy正在为我创建缓存,在第二个请求中,它从缓存中获取响应。以下是我的代码: def start_requests(self): meta = {'REDIRECT_ENABLED':True} productUrl

我正在尝试对特定网站上的网页进行爬网。对于我通过
scrapy.Request()
发送的不同cookie集,该网页略有不同

如果我一个接一个地请求网页,它会给我正确的结果,但当我将这些cookies发送到for循环中时,它会给我相同的结果。我认为scrapy正在为我创建缓存,在第二个请求中,它从缓存中获取响应。以下是我的代码:

def start_requests(self):
        meta = {'REDIRECT_ENABLED':True}
        productUrl = "http://xyz"
        cookies = [{'name': '', 'value': '=='},{'name': '', 'value': '=='}]
        for cook in cookies:

            header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"}
            productResponse = scrapy.Request(productUrl,callback=self.parseResponse,method='GET',meta=meta,body=str(),cookies=[cook],encoding='utf-8',priority=0,dont_filter=True)
            yield productResponse


def parseResponse(self,response): 
     selector = Selector(response)
     print selector.xpath("xpaths here").extract()
     yield None
我希望print语句对这两个请求给出不同的结果


如果有什么不清楚的地方,请在评论中提及。

可以通过两种方式禁用缓存

  • 更改setting.py文件中与缓存相关的设置中的值。保持HTTPCACHE_启用=False
  • 也可以在运行时“scrapy crawl-crawl-name--set-HTTPCACHE_ENABLED=False”中完成

  • 这里我假设您只是想避免只缓存特定的请求

    对于本例,这意味着避免在
    start\u requests
    下缓存这些请求,并缓存所有其他请求(可能在
    parseResponse
    下)

    为此,只需将
    productResponse.meta['dont_cache']=True
    行添加到代码中,然后 在
    settings.py下设置
    HTTPCACHE\u ENABLED=True

    现在,所有其他请求都将被缓存

    def start_requests(self):
            meta = {'REDIRECT_ENABLED':True}
            productUrl = "http://xyz"
            cookies = [{'name': '', 'value': '=='},{'name': '', 'value': '=='}]
            for cook in cookies:
    
                header = {"User-Agent":"Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.85 Safari/537.36"}
                productResponse = scrapy.Request(productUrl,callback=self.parseResponse,method='GET',
                                                 meta=meta,body=str(),cookies=[cook],
                                                 encoding='utf-8',priority=0,dont_filter=True)
                productResponse.meta['dont_cache'] = True
                yield productResponse
    
    def parseResponse(self,response): 
         selector = Selector(response)
         print selector.xpath("xpaths here").extract()
         yield None
    

    只需向请求url添加一个伪参数

    随机导入
    productUrl=”http://xyz“+”?dummy=“+str(random.random())
    
    您可以通过查看每个请求的
    请求。标题
    来查看发送了哪些Cookie。您将有一个
    'Cookie':
    条目。可能是因为您的旧Cookie一直存在,因为Scrapy在整个爬网过程中为每个站点保留一个cookiejar。若要禁用此功能,请在
    request.meta中添加
    'don\u merge\u cookies':True'
    。有关更多详细信息,请参阅。FWIW,我在2中遇到了一个异常。-但它在以下情况下工作:-set HTTPCACHE_ENABLED=0