暂停和恢复自包含的scrapy脚本
Posted
技术标签:
【中文标题】暂停和恢复自包含的scrapy脚本【英文标题】:Pausing and resuming a self contained scrapy script 【发布时间】:2017-03-14 15:13:31 【问题描述】:我正在运行一个独立的 Scrapy 蜘蛛,它存在于单个 .py
文件中。如果服务器发生故障/断电/脚本可能失败的任何其他原因,是否有一种优雅的方法可以确保我能够在恢复后恢复运行?
可能类似于内置的 JOBDIR 设置?
【问题讨论】:
【参考方案1】:如果你有一个独立的脚本,你仍然可以使用 JOBDIR 选项,例如你可以在custom_settings属性中设置一个值:
class MySpider(scrapy.Spider):
custom_settings =
'JOBDIR': './job',
#...
或者,您可以在创建 CrawlerProcess 时设置此选项(如果您正在使用该选项在脚本中运行蜘蛛):
process = CrawlerProcess('JOBDIR': './job')
process.crawl(MySpider)
process.start()
【讨论】:
看来我得坚持scrapy的机制了,谢谢!【参考方案2】:有一个完整的documentation page 涵盖了这个问题:
要启动一个启用了持久性支持的蜘蛛,运行它就像 这个:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
然后,您可以随时安全地停止蜘蛛(通过按 Ctrl-C 或发送信号),然后通过发出相同的命令恢复它:
scrapy crawl somespider -s JOBDIR=crawls/somespider-1
【讨论】:
我拥有的是一个自包含的蜘蛛模块,而不是由“startproject”关键字生成的整个项目,不幸的是这不适用于我的情况。另外,我正在寻找一种方法来持续保存蜘蛛的状态,以确保在服务器故障的情况下我有一种恢复方式,而不是在轻微暂停的情况下。 @m.livs 哦,对不起,我错过了那部分。为什么不只是有一个scrapy项目?将您拥有的任何项目放在一个模块中绝不是一个好主意,除非它少于 50 行代码左右。 我正在尝试仅使用 Scrapy 中我需要的部分。即使我确实使用了一个完整的项目, -S 机制在暴力停止的情况下也无济于事...... @m.livs 如果 JOBDIR 在暴力停止的情况下不起作用,那么在 scrapy 错误跟踪器 (github.com/scrapy/scrapy/issues) 中提出问题可能会有所帮助,或者可能对现有问题发表评论 (@987654323 @)【参考方案3】:您可以使用supervisor。
[program:foo]
command=~/script_path/script.py
【讨论】:
我会调查的,谢谢!以上是关于暂停和恢复自包含的scrapy脚本的主要内容,如果未能解决你的问题,请参考以下文章
用 Rhino 解释 Java 中的 JavaScript:暂停/恢复脚本