【问题标题】:Schedule a spider in scrapyd and pass spider config options在 scrapyd 中安排蜘蛛并传递蜘蛛配置选项
【发布时间】:2014-09-11 13:23:15
【问题描述】:

我正在尝试将使用 slyd 创建的蜘蛛配置为使用 scrapy-elasticsearch,所以我发送 -d parameter=value 来配置它:

curl http://localhost:6800/schedule.json -d project=myproject  -d spider=myspider -d setting=CLOSESPIDER_ITEMCOUNT=100 -d settings=ITEM_PIPELINE=scrapyelasticsearch.ElasticSearchPipeline -d setting=ELASTICSEARCH_SERVER=localhost -d setting=ELASTICSEARCH_PORT=9200 -d setting=ELASTICSEARCH_INDEX=scrapy -d setting=ELASTICSEARCH_TYPE=items -d setting=ELASTICSEARCH_UNIQ_KEY=url

这是应该进入 settings.py 的默认配置:

ITEM_PIPELINES = [
  'scrapyelasticsearch.ElasticSearchPipeline',
]

ELASTICSEARCH_SERVER = 'localhost' # If not 'localhost' prepend 'http://'
ELASTICSEARCH_PORT = 9200 # If port 80 leave blank
ELASTICSEARCH_USERNAME = ''
ELASTICSEARCH_PASSWORD = ''
ELASTICSEARCH_INDEX = 'scrapy'
ELASTICSEARCH_TYPE = 'items'
ELASTICSEARCH_UNIQ_KEY = 'url'

我还没有找到一种方法来配置 slyd 以使用每个新蜘蛛自动生成这些设置,所以我试图将选项作为 -d 参数传递。 scrapyd 仍在运行蜘蛛,但没有任何内容保存到 elasticsearch,错误日志显示如下:

[Launcher,1900/stderr] /home/PORTIA/local/lib/python2.7/site-packages/scrapy/contrib/pipeline/__init__.py:21: 
ScrapyDeprecationWarning: ITEM_PIPELINES defined as a list or a set is deprecated, switch to a dict
      category=ScrapyDeprecationWarning, stacklevel=1)

【问题讨论】:

    标签: python scrapy scrapyd portia


    【解决方案1】:

    在新版本的scrapy中,您必须像这样将管道定义为字典

        ITEM_PIPELINES = {'scrapyelasticsearch.ElasticSearchPipeline': 100}
    

    你可以做的是将所有蜘蛛放在蜘蛛文件夹下的同一个项目中,这样你就可以共享你的设置和管道

    【讨论】:

    • 有没有办法将该dict作为参数发送到scrapyd rest?如果不是,我如何与所有蜘蛛共享相同的设置?我想要一种设置一次并在所有项目中使用的方法。
    • 虽然这不能回答将管道作为参数发送,但它确实有效,我最终只是设置了 slyd 的项目创建模板来添加它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-11
    相关资源
    最近更新 更多