情况如下:
我有functionA返回一个url列表进行抓取,scrapy完成抓取后,我想scrapy(可能重新启动)从functionA获取一个新的url列表并重复抓取它们
实现它的正确方法是什么?它只能通过scrapy实现并且不依赖于其他软件吗?
当使用字段start_urls时(如start_url = functionA()),似乎只获取一次并且不会重复抓取
答案 0 :(得分:3)
真的不知道如何更新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