Я хочу установить пользовательский параметр в моем запросе, чтобы получить его, когда обрабатываю его в parse_item. Это мой код:Передача пользовательского параметра на запрос scrapy
def start_requests(self):
yield Request("site_url", meta={'test_meta_key': 'test_meta_value'})
def parse_item(self, response):
print response.meta
parse_item будет называться в соответствии со следующими правилами:
self.rules = (
Rule(SgmlLinkExtractor(deny=tuple(self.deny_keywords), allow=tuple(self.client_keywords)), callback='parse_item'),
Rule(SgmlLinkExtractor(deny=tuple(self.deny_keywords), allow=('',))),
)
По scrapy doc:
атрибут Response.meta распространяется вдоль переадресовывает и повторами , поэтому вы получите оригинал Request.meta, отправленный вашим пауком.
Но я не вижу пользовательскую мета в parse_item
. В любом случае, чтобы исправить это? Есть meta
правильный путь?
Я не думаю, что 'meta' из запросов запуска распространяется в обратных вызовах, когда вы используете' CrawlSpider'. Но вы можете использовать 'cb_kwargs' в своем' правиле' (см. Http://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.contrib.spiders.Rule) –
Вы также можете переопределить 'CrawlSpider '' s 'parse_start_url' обрабатывать ответ из запросов, сгенерированных в' start_requests' –
Спасибо, что я хотел сделать, это передать мой параметр (например, custom_ request_id) вместе с инициированным запросом, поэтому, когда он перенаправляется или что-то с ним происходит , мой параметр остается с ним так в parse_item, я бы знал, какой запрос он был. – AliBZ