“动态”覆盖Scrapy输出格式

时间:2014-11-07 18:40:57

标签: scrapy

我想在代码中直接覆盖spider的输出格式。我无法修改设置;我无法更改命令行。我想在__init__方法中做到这一点。

理想情况下,即使将类似-o /tmp/1.csv的内容传递给蜘蛛,新输出格式也应该有效。但如果不可能,那就通过它。

我该怎么做?

谢谢。

1 个答案:

答案 0 :(得分:1)

因此,您可以在蜘蛛中放置一个自定义属性,设置如何为此蜘蛛处理数据,并创建一个尊重该配置的Scrapy item pipeline

您的蜘蛛代码如下所示:

from scrapy import Spider


class MySpider(Spider):
    def __init__(self, *args, **kwargs):
        super(MySpider, self).__init(*args, **kwargs)
        self.data_destination = self._get_data_destination()

    def _get_data_destination(self):
         # return your dynamically discovered data destination settings here

你的item pipeline就像是:

class MySuperDuperPipeline(object):
    def process_item(self, item, spider):
        data_destination = getattr(spider, 'data_destination')

        # code to handle item conforming to data destination here...

        return item