【问题标题】:How does Scrapy save crawl state?Scrapy如何保存爬取状态?
【发布时间】:2019-11-14 15:07:24
【问题描述】:

我能够保存我的爬行状态,并且 Scrapy 从我切断它的地方成功继续。每次重新启动蜘蛛时,我都保持 start_urls 不变,即每次重新启动蜘蛛时提供的 start_urls 的顺序和列表都是不变的。但是我需要对我的 start_urls 进行随机洗牌,因为我有来自不同域以及来自同一个域的 URL,但是由于它们是有序的,因此爬网延迟显着降低了我的爬网速度。我的列表有千万个,我已经抓取了一百万个 URL。所以我不想危害任何东西或重新开始爬网。

我看到 requests.seen 包含看起来像是已访问 URL 的散列值。从 Scrapy 代码中,我确信它用于过滤重复项。但我不确定 spider.state 或 requests.queue 对保存状态或重新启动爬网有何帮助。

【问题讨论】:

  • 我正在努力寻找同样的东西,仅 requests.seen 在我的情况下忽略了多余的抓取,如果您找到了解决方案,请您发布答案

标签: python scrapy


【解决方案1】:

callbackerrback 调用请求时,您可以将这些请求写入一个txt 文件,同时将它们分开。

def start_requests(self):
    for u in self.start_urls:
        yield scrapy.Request(u, callback=self.parse,
                                    errback=self.err,
                                    dont_filter=True)

def parse(self, response):
    with open('successful_requests.txt', 'a') as out:
        out.write(response.url + '\n')

def err(self, failure):
    with open('failed_requests.txt', 'a') as out:
        out.write(response.url + ' ' + str(failure) + '\n')

要达到请求的状态,只需阅读这些 txt 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2014-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多