2016-03-18 2 views
0

здесь ситуация:как SCRAPY работа в динамических start_urls repeatly

я есть functionA, которые возвращают список URL-адресов для обхода, и после того, как SCRAPY финишного ползания, я хочу Scrapy к (возможно перезапустить) получить новый список URL-адресов из functionA и сканировать их повторно

Что это за способ его реализовать? Может ли он осознать только при помощи scrapy и не зависит от другого программного обеспечения?

при использовании поля start_urls, (как START_URL = functionA()), кажется, что получить один раз и не ползать repeatly

ответ

1

Не знаю, как вы собираетесь обновить свой список, который functionA дает, но это должно работать на то, что вы хотите.

class MySpider(Spider): 
    name = 'myspider' 

    idle_time = 0 
    def functionA(self): 
     # returns urls 

    def start_requests(self): 
     for url in self.functionA(): 
      yield Request(url, callback=self.parse) 
     self.crawler.signals.connect(self.spider_idle, 
            signal=signals.spider_idle) 

    def spider_idle(self, spider): 
     # called when the spider is `idle`, before finishing 
     self.idle_time += 1 
     if self.idle_time < 10: # how many times you want to recrawl? 
      for url in self.functionA(): 
       yield Request(url, callback=self.parse) 


    def parse(self, response): 
     # parse your urls 
+0

спасибо за ваш ответ !!!!!, но есть некоторые проблемы: 1. для url в self.getPricesUrl (self): TypeError: getPricesUrl() принимает ровно 1 аргумент (2 заданный), после чего я удаляю «self» в скобке 2. сигналы не определены (после того, как из сигналов импорта scrapy это нормально), но i попробуйте scraw crawl spider, он все еще работает только один раз –

+0

делясь журналами, как я уже сказал, я не знаю, как вы повторно заполняете свои URL-адреса, так что, если они повторяются во второй раз, возможно, фильтрация их фильтрует. – eLRuLL

+0

привет, я добавляю журнал, могу ли я добавить dont_filter = True в задаче yield (url, callback = self.parse), чтобы он мог сканировать один и тот же URL-адрес? –

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