【问题标题】:Pausing and resuming a self contained scrapy script暂停和恢复自包含的scrapy脚本
【发布时间】:2017-03-14 15:13:31
【问题描述】:

我正在运行一个独立的 Scrapy 蜘蛛,它存在于单个 .py 文件中。如果服务器发生故障/断电/脚本可能失败的任何其他原因,是否有一种优雅的方法可以确保我能够在恢复后恢复运行?

可能类似于内置的 JOBDIR 设置?

【问题讨论】:

    标签: python web web-scraping scrapy web-crawler


    【解决方案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
    

    【讨论】:

    • 我会调查的,谢谢!
    猜你喜欢
    • 2021-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-19
    • 2015-07-28
    相关资源
    最近更新 更多