Suppose I have a Bookitem, I need to add information to it in both the parse phase and detail phase
def parse(self, response) data = json.loads(response) for book in data['result']: item = BookItem(); item['id'] = book['id'] url = book['url'] yield Request(url, callback=self.detail) def detail(self,response): hxs = HtmlXPathSelector(response) item['price'] = ...... #I want to continue the same book item as from the for loop above
Using the code as is would led to undefined item in the detail phase. How can I pass the item to the detail? detail(self,response,item) doesn’t seem to work.
Advertisement
Answer
There is an argument named meta
for Request:
yield Request(url, callback=self.detail, meta={'item': item})
then in function detail
, access it this way:
item = response.meta['item']
See more details here about jobs topic.