Scrapy: Передача элемента между методами
Предположим, что у меня есть Bookitem, мне нужно добавить к нему информацию как на фазе анализа, так и на фазе
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
Использование кода as is приведет к элементу undefined на этапе детализации. Как передать элемент деталям? детали (self, response, item), похоже, не работают.
Ответы
Ответ 1
Существует аргумент с именем meta
для запроса:
yield Request(url, callback=self.detail, meta={'item': item})
тогда в функции detail
обращайтесь к нему следующим образом:
item = response.meta['item']
Подробнее о здесь о теме вакансий.
Ответ 2
Вы можете определить переменную в init:
class MySpider(BaseSpider):
...
def __init__(self):
self.item = None
def parse(self, response)
data = json.loads(response)
for book in data['result']:
self.item = BookItem();
self.item['id'] = book['id']
url = book['url']
yield Request(url, callback=self.detail)
def detail(self, response):
hxs = HtmlXPathSelector(response)
self.item['price'] = ....