scrapy如何针对不同的spider指定不同的参数

来源:互联网 发布:最强围棋软件 编辑:程序博客网 时间:2024/05/30 02:26


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。

尝试了一下修改,但是有些错误,先记录一下,真的需要再研究


原创粉丝点击