我正在使用的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 reactorfrom scrapy.crawler import Crawlerfrom scrapy import log,signalsfrom scrapyproject.spIDers.sample_spIDer import SampleSpIDerspIDer = 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秒,以便我可以在处理请求之前停止蜘蛛.我原以为我下次运行蜘蛛时,会不会重新生成请求.事实并非如此.
我在scrapy_cache文件夹中看到一个名为requests.queue的文件夹.但是,这总是空的.
看起来request.seen文件正在保存已发出的请求(使用SHA1哈希),这很棒.但是,下次运行spIDer时,会重新生成请求,并将(重复的)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如何暂停/恢复工作?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)