如何在不使用 "meta" 的情况下在 Scrapy Parse Methods 之间同步数据?
How can I sync data between Scrapy Parse Methods without using "meta"?
我想使用元数据以外的其他方法,因为元数据当前用于处理我的蜘蛛程序中的 302 响应。当我在这个字典中添加额外的项目时,为了同步数据,302 响应被忽略
def start_requests(self):
for url in urls:
self.rowExt = row
yield scrapy.Request(
url=url, callback=self.parse, dont_filter=True,
meta={
'dont_redirect': True,
'handle_httpstatus_list': [302],
}
)
如果我向该字典添加任何额外的项目,302 响应处理将不起作用。
def start_requests(self):
for url in urls:
self.rowExt = row
yield scrapy.Request(
url=url, callback=self.parse, dont_filter=True,
meta={
'dont_redirect': True,
'handle_httpstatus_list': [302],
'Name': name,
'Price': price,
}
)
如果你用的是Scrapy v1.7+可以用cb_kwargs,用法有点类似
yield scrapy.Request(
url=url, callback=self.parse, dont_filter=True,
meta={
'dont_redirect': True,
'handle_httpstatus_list': [302],
},
cb_kwargs={
'name': name,
'price': price,
}
)
def parse(self, response, name, price):
....
请注意,传递给 cb_kwargs
的项目作为关键字参数传递给回调函数,因此您需要相应地调整函数签名。
我想使用元数据以外的其他方法,因为元数据当前用于处理我的蜘蛛程序中的 302 响应。当我在这个字典中添加额外的项目时,为了同步数据,302 响应被忽略
def start_requests(self):
for url in urls:
self.rowExt = row
yield scrapy.Request(
url=url, callback=self.parse, dont_filter=True,
meta={
'dont_redirect': True,
'handle_httpstatus_list': [302],
}
)
如果我向该字典添加任何额外的项目,302 响应处理将不起作用。
def start_requests(self):
for url in urls:
self.rowExt = row
yield scrapy.Request(
url=url, callback=self.parse, dont_filter=True,
meta={
'dont_redirect': True,
'handle_httpstatus_list': [302],
'Name': name,
'Price': price,
}
)
如果你用的是Scrapy v1.7+可以用cb_kwargs,用法有点类似
yield scrapy.Request(
url=url, callback=self.parse, dont_filter=True,
meta={
'dont_redirect': True,
'handle_httpstatus_list': [302],
},
cb_kwargs={
'name': name,
'price': price,
}
)
def parse(self, response, name, price):
....
请注意,传递给 cb_kwargs
的项目作为关键字参数传递给回调函数,因此您需要相应地调整函数签名。