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