Множественное наследование в пауках Scrapy, как использовать методы из обоих родительских классов - PullRequest
0 голосов
/ 21 января 2020

У меня есть два паука, каждый из которых начинается с другого URL и заканчивается на другой конечной странице того же домена. Что мне нужно, так это на последней странице, но они должны поступить туда после потока из-за файлов cookie и требований запроса. Они выглядят примерно так:

class Spider1(Spider): 

  def start_requests(self):
    yield Request(..., callback=self.parse_first_page_spider1) #or parse_first_page_spider2

  def parse_first_page_spider1(self, response):
     #Get some data, and makes new request
     yield Request(..., callback=self.parse_second_page_spider1) # or _spider2

  def parse_second_page_spider1(self, response):
     #Get some data, and makes new request
     yield Request(..., callback=self.parse_final_page)

  def parse_final_page(self, response)
    #Here i gather all the data and make an item
    item = CustomItem()
    yield item

Методы parse_first_page и parse_second_page различны для паука 1 и 2.

Теперь мне нужен третий паук, который будет делать ВСЕ в Spider1 И Spider2, но parse_final_page будет другим. Поэтому я подумал, что мог бы заставить нового паука наследовать от обоих пауков что-то вроде этого:

class Spider3(Spider1, Spider2): 
  url1 = www.page.com/page1
  url2 = www.page.com/page2

  def start_requests(self):
    yield Request(url1, callback=self.parse_first_page_spider1)
    yield Request(url2, callback=self.parse_first_page_spider2)

  def parse_final_page(self, response)
    #Here I would overwrite the methods, so both ended up here.

Это не работает, только запросы spider1 заканчиваются на parse_final_page, и никакой ошибки не возникает, но ничего от spider2 даже очищен.

Я также пытался сделать BaseSpider, и Spider1 и Spider2 наследовали его, только перезаписывая методы в середине, но тогда я не знаю, как заставить их работать раздельно ,

...