scrapy中如何指定spider不用的参数,特别是item_pipeline?
这里没有答案。
首先,在scrapy中不直接支持这种方式
一般都是通过pipeline的process_item中区分是否当前的pipeline作用到这个item上,这里有一个链接可以参考,
https://groups.google.com/forum/?fromgroups=#!topic/scrapy-users/msKQ7UaYh_E
这里有两种实现方式
def process_item(self, item, spider):
if spider.name not in ['myspider1', 'myspider2', 'myspider3']:
return item
或者
class SomeSpider(CrawlSpider):
pipelines = ['first']
class FirstPipeline(object):
def process_item(self, item, spider):
if 'first' not in getattr(spider, 'pipelines', []):
return item
有没有办法实现不同的参数呢
我想应该有办法,我们知道在运行command的时候可以指定参数,如scrapy crawl somespider -s LOG_FILE='path‘,尝试了一下,发现item_pipeline也可以,比如-s ITEM_PIPELINES='some.pipeline.name' (不知道怎么加list)
那么这里可以,也应该有想类似的途径来实现。接下来看看源代码吧
opts, args = parser.parse_args(args=argv[1:])
_run_print_help(parser, _run_command, cmd, args, opts)
spider = self.crawler.spiders.create(spname, **opts.spargs)
这里有一些代码片段(摘自scrapy的crawl.py,cmdline.py, sha1 为27583922a702e808d544534bdb920e31eb6a9e9c)可以看出解析命令行参数,并使用manager(就是spiders)来生成一个spider。
尝试了一下修改,但是有些错误,先记录一下,真的需要再研究