在scrapyd中调度爬虫并传递配置选项

2 投票
1 回答
1042 浏览
提问于 2025-04-21 02:29

我正在尝试配置用slyd创建的爬虫,让它们使用scrapy-elasticsearch,所以我发送了-d 参数=值来进行配置:

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)

1 个回答

3

在新的Scrapy版本中,你需要把数据处理管道定义成字典,像这样:

    ITEM_PIPELINES = {'scrapyelasticsearch.ElasticSearchPipeline': 100}

你可以把所有的爬虫放在同一个项目的爬虫文件夹里,这样就可以共享你的设置和管道了。

撰写回答