我使用循环在start_request()
内生成请求,并且我希望将索引传递给parse()
,以便将其存储在项目中。但是,当我使用self.i
时,输出的每个项目都有i
最大值(最后一个循环转弯)。我可以使用response.url.re('regex to extract the index')
,但我想知道是否有一种干净的方法可以将变量从start_requests传递到解析。
答案 0 :(得分:26)
您可以使用scrapy.Request
meta
属性:
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
def start_requests(self):
urls = [...]
for index, url in enumerate(urls):
yield scrapy.Request(url, meta={'index':index})
def parse(self, response):
print(response.url)
print(response.meta['index'])
答案 1 :(得分:3)
您可以将cb_kwargs
参数传递给scrapy.Request()
https://docs.scrapy.org/en/latest/topics/request-response.html#scrapy.http.Request.cb_kwargs
import scrapy
class MySpider(scrapy.Spider):
name = 'myspider'
def start_requests(self):
urls = [...]
for index, url in enumerate(urls):
yield scrapy.Request(url, callback=self.parse, cb_kwargs={'index':index})
def parse(self, response, index):
pass