gpt4 book ai didi

scrapy - Scrapy 暂停/恢复如何工作?

转载 作者:行者123 更新时间:2023-12-04 11:04:45 26 4
gpt4 key购买 nike

有人可以向我解释一下 Scrapy 中的暂停/恢复功能是如何实现的吗?作品?
scrapy的版本我正在使用的是 0.24.5
documentation没有提供太多细节。

我有以下简单的蜘蛛:

class SampleSpider(Spider):
name = 'sample'

def start_requests(self):
yield Request(url='https://colostate.textbookrack.com/listingDetails?lst_id=1053')
yield Request(url='https://colostate.textbookrack.com/listingDetails?lst_id=1054')
yield Request(url='https://colostate.textbookrack.com/listingDetails?lst_id=1055')

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

我正在使用它运行它:
from twisted.internet import reactor
from scrapy.crawler import Crawler
from scrapy import log, signals


from scrapyproject.spiders.sample_spider import SampleSpider
spider = SampleSpider()
settings = get_project_settings()
settings.set('JOBDIR', '/some/path/scrapy_cache')
settings.set('DOWNLOAD_DELAY', 10)
crawler = Crawler(settings)
crawler.signals.connect(reactor.stop, signal=signals.spider_closed)
crawler.configure()
crawler.crawl(spider)
crawler.start()
log.start()
reactor.run()

如您所见,我启用了 JOBDIR 选项,以便我可以保存我的爬网状态。

我设置了 DOWNLOAD_DELAY10 seconds这样我就可以在处理请求之前停止蜘蛛。我原以为下次运行蜘蛛时,不会重新生成请求。事实并非如此。

我在我的 scrapy_cache 文件夹中看到一个名为 requests.queue 的文件夹。然而,那总是空的。

看起来 requests.seen 文件正在保存发出的请求(使用 SHA1 哈希),这很棒。但是,下次我运行蜘蛛时,请求会重新生成并且(重复) SHA1散列被添加到文件中。我在 Scrapy 中跟踪了这个问题代码,它看起来像 RFPDupeFilter使用“a+”标志打开 requests.seen 文件。所以它总是会丢弃文件中以前的值(至少这是我的 Mac OS X 上的行为)。

最后,关于蜘蛛状态,我可以从 Scrapy看到当蜘蛛关闭时蜘蛛状态被保存并在它打开时被读回的代码。但是,如果发生异常(例如,机器关闭),这不是很有帮助。我必须定期储蓄吗?

我在这里的主要问题是:使用 Scrapy 的常见做法是什么?同时期望抓取会多次停止/恢复(例如,当抓取一个非常大的网站时)?

最佳答案

为了能够暂停和恢复scrapy搜索,您可以运行以下命令开始搜索:

scrapy crawl somespider --set JOBDIR=crawl1

要停止搜索,您应该运行 control-C,但是您必须只运行一次并等待 scrapy 停止,如果您运行 control-C 两次,它将无法正常工作。

然后您可以通过再次运行此命令来恢复搜索:
scrapy crawl somespider --set JOBDIR=crawl1

关于scrapy - Scrapy 暂停/恢复如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28851535/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com