назначить свойства неправильным элементам в Scrapy - PullRequest
0 голосов
/ 24 мая 2018

КОД

spider.py

...
def parse(self, response):
    for one_item in response.xpath('path1'):
        item = ProjectItem()
        request = scrapy.Request(one_item.xpath('path2'), callback=self.parse2)
        request.meta['item'] = item
        yield request

property = []
def parse2(self, response)
   item = response.meta['item']

   for x in response.xpath('path3')
       self.property.append('path4')

   next_page = response.xpath('path5')
   if next_page is not None:
       request2 = scrapy.Request(next_page, callback=self.parse2)
       request2.meta['item'] = item
       yield request2
   else:
       item['field'] = self.property
       self.property = []
       yield item

Проблема заключается в том, что, когда паук ползет до next_page.Некоторым self.property присваивается неверный товар.Я не знаю, как его починить.

1 Ответ

0 голосов
/ 24 мая 2018

self.property - это атрибут класса, который используется всеми вызовами на parse2, и вы не можете контролировать порядок каждого вызова на parse2.

Чтобы решить эту проблему, вам нужно передать список свойств внутри мета или как атрибут элемента:

def parse(self, response):
    for one_item in response.xpath('path1'):
        item = ProjectItem()
        item['field'] = []
        request = scrapy.Request(one_item.xpath('path2'), callback=self.parse2)
        request.meta['item'] = item
        yield request

def parse2(self, response)
   item = response.meta['item']
   for x in response.xpath('path3')
       item['field'].append('path4')

   next_page = response.xpath('path5')
   if next_page is not None:
       request2 = scrapy.Request(next_page, callback=self.parse2)
       request2.meta['item'] = item
       yield request2
   else:
       yield item
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...