scrapy 如何在剪贴板中禁用缓存?

7rfyedvj  于 2023-02-08  发布在  其他
关注(0)|答案(3)|浏览(136)

我正在抓取一个特定网站上的网页。我通过scrapy.Request()发送的不同cookie集的网页会有一点不同。
如果我一个接一个地向网页发出请求,它会给我正确的结果,但是当我在for循环中发送这些cookie时,它给我的结果是一样的。我认为scrappy是在为我创建缓存,而在第二个请求中,它会从缓存中获取响应。下面是我的代码:

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语句对这两个请求给予不同的结果。
如果有任何不清楚的地方,请在评论中提及。

9bfwbjaz

9bfwbjaz1#

可以通过2种方式禁用缓存
1.更改www.example.com文件中缓存相关设置的值setting.py。通过保持HTTPCACHE_ENABLED=False
1.或者,它可以在运行时“抓取抓取名称--设置HTTPCACHE_ENABLED=False”完成

5jvtdoz2

5jvtdoz22#

这里我假设您只想避免只缓存特定的请求。
对于这个例子,它意味着避免在start_requests下缓存这些请求,并缓存所有其他请求(可能在parseResponse下)。
为此,只需将productResponse.meta['dont_cache'] = True行添加到代码中,并将HTTPCACHE_ENABLED=True设置在settings.py
现在所有其他请求都将被缓存。

def start_requests(self):
    meta = {'REDIRECT_ENABLED':True}
    productUrl = "http://xyz"
    cookies = [{'name': '', 'value': '=='},{'name': '', 'value': '=='}]
    for cook in cookies:
        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
carvr3hs

carvr3hs3#

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

import random

productUrl = "http://xyz" + "?dummy=" + str(random.random())

相关问题