2017-11-24 22 views
0

スケジュールされた時間にスパイダーを複数回クロールしたい。次のクロール時間は、最初のクロールが完了した後に決定されます。ここではそれを行うに私のコードですが、コードは最初crawler.start()ラインでブロックされます。スケジューリング予定時刻にスパイダーをクロールする

spidersQ = collections.OrderedDict() 

class QuotesSpider(scrapy.Spider): 
    name = "quotes" 
    global spidersQ 
    start_urls = [ 
     "https://www.amazon.com", 
    ] 

    def parse(self, response): 
     root = lxml.html.fromstring(response.body) 
     lxml_result = root.xpath("(//div[contains(@class,'a-section')]/div[contains(@class,'olpOffer')])[1]") 

     price = lxml_result[0].text.strip() 
     # Now schedule this spider to run again after 5 seconds 
     spidersQ[datetime.datetime.now() + datetime.timedelta(seconds=5)] = QuotesSpider 


def main(): 
    process = CrawlerProcess({ 
     'USER_AGENT': 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)' 
    }) 

    process.crawl(QuotesSpider) 
    process.start(stop_after_crawl=False) # the script will block here forever 

    while True: 
     if datetime.datetime.now() > first(spidersQ): 
      schedTime, spider = spidersQ.popitem(last=False) 
      process.crawl(spider) 
      process.start(stop_after_crawl=False) 
     else: 
      time.sleep(1) 
+0

ました再現できる。 Ctrl + Cでは、 'process.start(...)'行の後に続きます。すでに 'CrawlerProcess'と' Ctrl + C'に関するバグがありました(https://github.com/scrapy/scrapy/issues/1279)。たぶんそれは何とか関連していて、あなたはこのようなものの関連する治療コードセクションでデバッグできますか? – Aufziehvogel

答えて

関連する問題