繁体   English   中英

Scrapy文档中可能存在不正确的Spider / Exporter示例代码

[英]Possibly incorrect spider/exporter example code in scrapy docs

有人可以检查下面的代码是否正确吗? 可以在http://readthedocs.org/docs/scrapy/en/0.14/topics/exporters.html上找到该代码。

我认为这是不正确的,因为:

  • 该类跟踪多个蜘蛛同时打开的多个文件,但是:
  • 每次打开新蜘蛛时,都会覆盖导出器(取决于文件)。

感谢您的协助。

class XmlExportPipeline(object):

    def __init__(self):
        dispatcher.connect(self.spider_opened, signals.spider_opened)
        dispatcher.connect(self.spider_closed, signals.spider_closed)
        self.files = {}

    def spider_opened(self, spider):
        file = open('%s_products.xml' % spider.name, 'w+b')
        self.files[spider] = file
        self.exporter = XmlItemExporter(file)
        self.exporter.start_exporting()

    def spider_closed(self, spider):
        self.exporter.finish_exporting()
        file = self.files.pop(spider)
        file.close()

    def process_item(self, item, spider):
        self.exporter.export_item(item)
        return item

我认为这个问题应该在scrapy-users组中提出

AFAIK,由于Scrapy v0.14不会在一个进程中支持多个蜘蛛( 相关讨论 ),因此此代码可以正常工作。 对于多个蜘蛛的明显解决方法是使exporters使用spider键来命令:

class XmlExportPipeline(object):

    def __init__(self):
        dispatcher.connect(self.spider_opened, signals.spider_opened)
        dispatcher.connect(self.spider_closed, signals.spider_closed)
        self.files = {}
        self.exporters = {}

    def spider_opened(self, spider):
        file = open('%s_products.xml' % spider.name, 'w+b')
        self.files[spider] = file
        self.exporters[spider] = XmlItemExporter(file)
        self.exporters[spider].start_exporting()

    def spider_closed(self, spider):
        self.exporters[spider].finish_exporting()
        file = self.files.pop(spider)
        file.close()

    def process_item(self, item, spider):
        self.exporters[spider].export_item(item)
        return item

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM