我试图在一个特定的website.The网页上爬行一个网页,对于我通过scrapy.Request()发送的不同的cookies集,有一些不同的变化。
如果我一个一个地请求网页,它会给我正确的结果,但是当我把这些cookie发送到for循环中时,它给了我相同的结果。我认为scrapy正在为我创建缓存,在第二个请求中,它从cache.Here获取的响应是我的代码:
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语句会为这两个请求提供不同的结果。
如果有什么不清楚的地方,请在评论中提及。
发布于 2016-08-16 12:36:01
缓存可以通过两种方式禁用。
发布于 2016-08-19 08:47:54
在这里,我假设您只是想避免只缓存特定的请求。
对于本例,它意味着避免在start_requests下缓存这些请求,并缓存所有其他请求(在parseResponse下可能有)。
要做到这一点,只需将productResponse.meta['dont_cache'] = True行添加到代码中,并在settings.py下设置HTTPCACHE_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发布于 2021-01-23 20:30:50
只需向请求url添加一个虚拟参数即可。
import random
productUrl = "http://xyz" + "?dummy=" + str(random.random())https://stackoverflow.com/questions/32615250
复制相似问题