2014-01-14 4 views
4

Я хочу установить пользовательский параметр в моем запросе, чтобы получить его, когда обрабатываю его в 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 правильный путь?

+0

Я не думаю, что 'meta' из запросов запуска распространяется в обратных вызовах, когда вы используете' CrawlSpider'. Но вы можете использовать 'cb_kwargs' в своем' правиле' (см. Http://doc.scrapy.org/en/latest/topics/spiders.html#scrapy.contrib.spiders.Rule) –

+0

Вы также можете переопределить 'CrawlSpider '' s ​​'parse_start_url' обрабатывать ответ из запросов, сгенерированных в' start_requests' –

+0

Спасибо, что я хотел сделать, это передать мой параметр (например, custom_ request_id) вместе с инициированным запросом, поэтому, когда он перенаправляется или что-то с ним происходит , мой параметр остается с ним так в parse_item, я бы знал, какой запрос он был. – AliBZ

ответ

1

При создании нового Request, необходимо указать функцию callback, в противном случае оно будет передано в parse метод CrawlSpider по умолчанию.

Я столкнулся с similar problem, и мне потребовалось некоторое время для отладки.

callback (вызываемый) - функция, которая будет вызываться с ответом этого запроса (после его загрузки) в качестве его первого параметра. Дополнительные сведения см. В разделе «Передача дополнительных данных для функций обратного вызова» ниже. Если в запросе не указан обратный вызов, будет использоваться метод parse() паука. Обратите внимание, что если исключения возникают во время обработки, вместо этого вызывается errback.

метод (строка) - метод HTTP этого запроса. По умолчанию «GET».

meta (dict) - начальные значения для атрибута Request.meta. Если дано, то указанный в этом параметре файл будет неглубоко скопирован.

Смежные вопросы