oracle导出csv数字不变0语句_在Scrapy中导出Json和CSV

97a6f0894f9fedecf1ea44307a00fc8a.png

在Scrapy中的数据可以通过有一些方法生成Json或CSV文件。

第一种方法是使用Feed Exports。您可以通过从命令行设置文件名和所需格式来运行爬虫并存储数据。

如果您希望自定义输出并在爬虫运行时生成结构化Json或CSV。您可以使用Item Pipeline在管道中设置输出属性,而不是从命令行设置。

使用Feed Export导出

您可以使用scrapy crawl myspider命令从命令行运行您的scraper 。如果要创建输出文件,则必须设置要使用的文件名和扩展名:

scrapy crawl myspider -o data.json 

scrapy crawl myspider -o data.csv 

scrapy crawl myspider -o data.xml

Scrapy有自己的内置工具来生成json,csv,xml和其他序列化格式。

如果要指定生成的文件的相对路径或绝对路径,或者从命令行设置其他属性,也可以执行此操作:

scrapy crawl reddit -s FEED_URI='/home/user/folder/mydata.csv' -s FEED_FORMAT=csv 

scrapy crawl reddit -s FEED_URI='mydata.json' -s FEED_FORMAT=json

使用Item Pipeline导出

Scrapy Item Pipeline是一种处理数据的通用工具。典型的用法是清理html,验证已删除的数据,删除重复数据并将数据存储在数据库中。如果您想要一个方便且可自定义的过程来存储数据,则可以使用管道。

您需要使用JsonItemExporter:

from scrapy.exporters import JsonItemExporter


class JsonPipeline(object):

    def __init __(self):
        self.file = open(“books.json”,'wb')
        self.exporter = JsonItemExporter(self.file,encoding ='utf-8',ensure_ascii = False)
        self.exporter.start_exporting()

    def close_spider(self,spider):
        self.exporter.finish_exporting()
        self.file.close()

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

除了JsonItemExporter,还有CsvItemExporter,它与CSV的工作方式相同,但您必须调用CsvItemExporter:

class CsvPipeline(object):

    def __init __(self):
        self.file = open(“booksdata.csv”,'wb')
        self.exporter = CsvItemExporter(self.file,unicode)
        self.exporter.start_exporting()

    def close_spider( self,spider):
        self.exporter.finish_exporting()
        self.file.close()

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

请注意,在csv文件中,默认情况下,字段用“,”(逗号)分隔。如果您的字段包含带逗号的文本,这会破坏整个结构,您可能需要创建一个修复此问题的函数:

def create_valid_csv(self, item):
    for key, value in item.items():
        is_string = (isinstance(value, basestring))
        if (is_string and ("," in value.encode('utf-8'))):
            item[key] = """ + value + """

您必须在导出项目之前调用此函数,以便ItemExporter相应地识别数据中的逗号。

配置settings.py

告诉scrapy你使用的管道非常重要,否则你的管道将不会被调用。

您必须将下面的代码添加到Scrapy项目中的settings.py中:

ITEM_PIPELINES = { 
    'RedditScraper.pipelines.JsonPipeline':300,
    'RedditScraper.pipelines.CsvPipeline':500,
}

这些数字的含义是管道执行的优先级。在此示例中,JsonPipeline将更快执行。并且数字必须在0-1000的范围内。

关于作者:

****************************************

  • 姓名:麦艳涛
  • 网名:挖掘机小王子
  • Q群:581465069

****************************************

转载请注明出处:https://zhuanlan.zhihu.com/p/58944212

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值