运行新的蜘蛛或获取新的网址列表进行抓取

时间:2015-02-27 11:29:39

标签: python scrapy

我刚用Scrapy写了一个简单的蜘蛛。现在我想知道是否有办法通过块抓取链接并在前一个蜘蛛完成其工作时重新启动蜘蛛?
我的意思是,在蜘蛛的__init__中,我从数据库中获得100个起始URL,当所有这些链接被爬行并且蜘蛛终止时,我想自动启动一个新的蜘蛛。我怎样才能做到这一点?或者可能有一种方法可以在不重新启动蜘蛛的情况下获取新的URL?

1 个答案:

答案 0 :(得分:0)

您可以将方法附加到spider_idle信号,以便当蜘蛛闲置时(即处理完所有请求和项目),它将执行该方法,或者在您的情况下,获取更多要抓取的URL

以下是一个例子:

from scrapy.xlib.pydispatch import dispatcher
from scrapy import Spider, signals
from scrapy.http import Request


class MySpider(Spider):

    def __init__(self, *args, **kwargs):
        super(MySpider, self).__init__(*args, **kwargs)
        self.start_urls = self.fetch_more_urls()
        dispatcher.connect(self.do_when_idle, signals.spider_idle)

    def do_when_idle(self, spider):

        if spider != self:
            return

        urls = self.fetch_more_urls()

        for url in urls:
            req = Request(url=url, callback=self.parse)
            self.crawler.engine.crawl(req, spider)

    def parse(self, response):
        # parse function

蜘蛛会在do_when_idle下处理/删除您的初始抓取请求后运行__init__函数。

有关信号的详细信息,请参阅:http://doc.scrapy.org/en/latest/topics/signals.html