scrapy pipelines导出各种格式

scrapy在使用pipelines的时候,我们经常导出csv,json.jsonlines等等格式。每次都需要写一个类去导出,很麻烦。

这里我整理一个pipeline文件,支持多种格式的。

# -*- coding: utf-8 -*-

# Define your item pipelines here
#
# Don‘t forget to add your pipeline to the ITEM_PIPELINES setting
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html

from scrapy import signals
from scrapy.exporters import *

class BaseExportPipeLine(object):
    def __init__(self,exporter,dst):
        self.files = {}
        self.exporter=exporter
        self.dst=dst
    @classmethod
    def from_crawler(cls, crawler):
        pipeline = cls()
        crawler.signals.connect(pipeline.spider_opened, signals.spider_opened)
        crawler.signals.connect(pipeline.spider_closed, signals.spider_closed)
        return pipeline

    def spider_opened(self, spider):
        file = open(self.dst, ‘wb‘)
        self.files[spider] = file
        self.exporter = self.exporter(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
class JsonExportPipeline(BaseExportPipeLine):
    def __init__(self):
        super(JsonExportPipeline, self).__init__(JsonItemExporter,"items.json")
class JsonLinesExportPipeline(BaseExportPipeLine):
    def __init__(self):
        super(JsonLinesExportPipeline, self).__init__(JsonLinesItemExporter,"items.jl")
class XmlExportPipeline(BaseExportPipeLine):
    def __init__(self):
        super(XmlExportPipeline, self).__init__(XmlItemExporter,"items.xml")
class CsvExportPipeline(BaseExportPipeLine):
    def __init__(self):
        super(CsvExportPipeline, self).__init__(CsvItemExporter,"items.csv")
class  PickleExportPipeline(BaseExportPipeLine):
    def __init__(self):
        super(PickleExportPipeline, self).__init__(PickleItemExporter,"items.pickle")
class  MarshalExportPipeline(BaseExportPipeLine):
    def __init__(self):
        super(MarshalExportPipeline, self).__init__(MarshalItemExporter,"items.marsha")
class  PprintExportPipeline(BaseExportPipeLine):
    def __init__(self):
        super(PprintExportPipeline, self).__init__(PprintItemExporter,"items.pprint.jl")

上面的定义好之后。我们就可以在settings.py里面设置导出指定的类了。是不是很强大。

时间: 2024-10-05 11:41:49

scrapy pipelines导出各种格式的相关文章

使用Apache POI导出Excel小结--导出XLS格式文档

使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI导出Excel小结--导出XLSX格式文档 使用Apache POI导出Excel--大数量导出 导出XLS格式文档 做企业应用项目难免会有数据导出到Excel的需求,最近在使用其,并对导出Excel封装成工具类开放出来供大家参考.关于Apache POI Excel基本的概念与操作我在这里就不啰嗦

PDMS模型导出RVM格式

2 .将PDMS中对象模型导出为RVM格式的宏文件代码如下: eg:如果要导出某几个房间内的全部bran equi !strus = array()!strus.append(|/1RXR246ZL|)!strus.append(|/1RXR148ZL|)!strus.append(|/1RXR248ZL|)!strus.append(|/1RXR220ZL|)!strus.append(|/1RXR748ZL|)!strus.append(|/1RXR521ZL|)!strus.append(

报表XML导出rtf格式,结果在浏览器中打开XML文件。用360浏览器下载rtf文件打开后出现Authentication failed 问题

报表XML导出rtf格式,结果在浏览器中打开XML文件.用360浏览器下载rtf文件打开后出现Authentication failed 问题 直接上问题图: 问题描述:在Oracle EBS中执行"资源事务处理 XML"请求,选择输出rtf格式,完成后查看输出,却在浏览器中打开了XML文件.        提示:需要检查一下是否有对应的模板文件和模板定义有效时间.        解决方案:1. 查看日志. 从中可以看出出错原因,以及模板代码.2. 添加Oracle XML Publi

使用PHPExcel导入导出excel格式文件

使用PHPExcel导入导出excel格式文件 作者:zccst 由于导出使用较多,下面是导出实现过程. 第一步,将PHPExcel的源代码复制到项目的lib下 文件包括:PHPExcel.php 和 文件夹PHPExcel 源代码见附件 注1:源代码是zip格式,能在windows和linux通用. 注2:PHPExcel.zip是干净代码,可以直接引用.PHPExcel2.zip有svn记录,不适合直接引用. 第二步:在需要导出的handler页面中引用 1,在头部引入三个文件 Php代码 

CSVHelper 导出CSV 格式

public class CSVHelper { System.Windows.Forms.SaveFileDialog saveFileDialog1;//保存 private string header = string.Empty;//标题 /// <summary> /// 初始化打印设置 /// </summary> /// <param name="printID"></param> protected void InitEx

Bash中使用MySQL导入导出CSV格式数据[转]

转自: http://codingstandards.iteye.com/blog/604541 MySQL中导出CSV格式数据的SQL语句样本如下: select * from test_info into outfile '/tmp/test.csv' fields terminated by ',' optionally enclosed by '"' escaped by '"' lines terminated by '\r\n'; MySQL中导入CSV格式数据的SQL语句

创建和导出不同格式图像文件的条形码控件Barcode .NET control

最近发现MDT推出去的系统的有不同问题,其问题就不说了,主要是策略权限被域继承了.比如我们手动安装的很多东东都是未配置壮态,推的就默认为安全壮态了,今天细找了一下,原来把这个关了就可以了. 创建和导出不同格式图像文件的条形码控件Barcode .NET control

利用freemarker导出页面格式复杂的excel

刚开始大家可能会利用poi生成简单的excel,但是遇到需要生成复杂的excel,poi导出excel就比较困难,这时候可以利用freemarker来渲染实现实现生成复杂的excel, 首先将excel右键导出xml(最好利用excel microsoft导出,不要用wps导出xml,因为microsoft导出的xml格式简单) ---->xml data部分用freemarker语法渲染,然后重命名为*.ftl(注意ss:ExpandedRowCount="3" wps可以不改

拍大师导出其他格式视频操作方法图文教程

拍大师是一款很好用的视频制作软件,大家再用它制作好视频后怎么导出视频呢?小编给大家小小的分享下,导出的视频格式如果默认的不是自己想要的,那怎么办呢?小编告诉大家怎么使用拍大师导出其他格式的视频?这样大家就可以根据自己的需要来选择自己的视频格式了. 步骤一:如果需要导出制作好的作品为其他视频格式,你可以打开创作工场,点左上方我的作品,然后鼠标移到你要导出的视频上面,点"导出"按钮--然后点确定 步骤二:选择你需要导出的视频格式,然后点"选择路径"按钮,选择你导出后的视