我正在尝试配置使用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)
答案 0 :(得分:3)
在scrapy的新版本中,你必须将管道定义为像这样的字典
ITEM_PIPELINES = {'scrapyelasticsearch.ElasticSearchPipeline': 100}
你可以做的是在蜘蛛文件夹下的同一个项目中制作所有蜘蛛,以便你可以共享你的设置和管道