【发布时间】:2016-03-18 14:09:11
【问题描述】:
情况如下:
我有一个返回要抓取的url列表的函数A,在scrapy完成抓取后,我希望scrapy(可能重新启动)从函数A获取一个新的url列表并重复抓取它们
什么是正确的实现方式?只能通过scrapy实现,不依赖其他软件吗?
在使用字段start_urls时,(如start_url=functionA())好像get一次,不会重复爬取
【问题讨论】:
情况如下:
我有一个返回要抓取的url列表的函数A,在scrapy完成抓取后,我希望scrapy(可能重新启动)从函数A获取一个新的url列表并重复抓取它们
什么是正确的实现方式?只能通过scrapy实现,不依赖其他软件吗?
在使用字段start_urls时,(如start_url=functionA())好像get一次,不会重复爬取
【问题讨论】:
真的不知道您将如何更新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
【讨论】: