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


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。

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


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值