Scrapy暂停/恢复如何工作?
可以向我解释暂停/继续功能的Scrapy
工作原理吗?
scrapy
我正在使用的版本是0.24.5
该文档没有提供太多细节。
我有以下简单的spider:
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 reactorfrom 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_DELAY
,10 seconds
以便可以在处理请求之前停止spider网。我本以为下次我运行spider程序时,将不会重新生成请求。事实并非如此。
我在scrapy_cache文件夹中看到一个名为requests.queue的文件夹。但是,这始终是空的。
看起来request.seen
文件正在保存发出的请求(使用SHA1
hashes),这很好。但是,下次我运行spider程序时,将重新生成请求,并将(重复的)SHA1哈希值添加到文件中。我在Scrapy
代码中跟踪了这个问题,它看起来像RFPDupeFilter
打开带有’a +’标志的requests.seen
文件。因此,它将始终丢弃文件中的先前值(至少那是我的Mac OS X上的行为)。
最后,关于spider状态,我可以从Scrapy
代码中看到,spider状态在spider关闭时被保存,在spider打开时被读回。但是,如果发生异常(例如,机器关闭),这不是很有帮助。我需要定期储蓄吗?
我在这里遇到的主要问题是:Scrapy
在期望爬网将停止/继续多次(例如,在爬网非常大的网站时)时,常用的惯例是什么?
回答:
为了能够暂停和继续抓取搜索,可以运行以下命令来开始搜索:
scrapy crawl somespider --set JOBDIR=crawl1
要停止搜索,你应该运行Ctrl-C,但是你只需要运行一次,然后等待scrapy停止,如果你运行Ctrl-C两次,它将无法正常工作。
然后你可以通过再次运行以下命令来恢复搜索:
scrapy crawl somespider --set JOBDIR=crawl1
以上是 Scrapy暂停/恢复如何工作? 的全部内容, 来源链接: utcz.com/qa/429927.html