根据Scrapy文档,在下载器中间件中不能使用response.request
,因为请求对象只有在通过所有其他下载器中间件后才会附加到响应。虽然我注意到在重定向(到验证码页面)的情况下,下载器中间件内的响应不仅有空request
字段 - 而且还有空元(pycharm调试器告诉我响应与任何请求无关) 。在下载中间件内处理时,我如何强制Scrapy保留元数据?我已将meta=response.meta
放置到每个请求中,但仍然会收到有关缺少元键的错误 - 并且缺少元属性。
def start_requests(self):
for value in values::
yield Request(
self.SEARCH_URL,
),
meta={'ssomekey': value},
)
从下载中间件:
def process_response(self, request, response, spider):
if not hasattr(response, 'meta'):
print "there is no meta"
启动后立即打印"没有元"
答案 0 :(得分:2)
请求对象可用作下载中间件的process_response
方法的参数,而不仅仅是process_request
。就像@ paul-trmrth建议的那样,请使用response.meta
而不是response.request.meta
或request.meta
,它会通过下载两端的所有中间件传播到蜘蛛。
对不起,死灵了,但是我有同样的问题并找到了答案。