scrapy如何在动态start_urls中重复工作

时间:2016-03-18 14:09:12

标签: python scrapy

情况如下:

我有functionA返回一个url列表进行抓取,scrapy完成抓取后,我想scrapy(可能重新启动)从functionA获取一个新的url列表并重复抓取它们

实现它的正确方法是什么?它只能通过scrapy实现并且不依赖于其他软件吗?

当使用字段start_urls时(如start_url = functionA()),似乎只获取一次并且不会重复抓取

1 个答案:

答案 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