美文网首页
scrapy框架-将数据写入json文件

scrapy框架-将数据写入json文件

作者: 中乘风 | 来源:发表于2018-07-13 14:04 被阅读0次

    使用背景

    有时候为了做测试,不想去数据库设置字段,设置musql字段实在是太麻烦了,这种情况下可以先把存储到json文件中,并观察数据的正确性,如果数据没问题了,再改成mysql存储即可。
    有时候任务本身就是要存储进json文件中。
    有时候为了更好的阅读数据,看结构,json文件是一个不错的选择

    json

    在pipeline写json存储

    存储的好处与逻辑:

    在pipeline写json存储,代码分离性比较好
    写文件涉及到打开关闭,在init进行打开操作,close进行关闭操作
    scrapy中数据流过process_item方法,所以对它进行重载,进行数据的写入
    通过信号量进行close操作

    具体的代码实现

    根据整理好的逻辑来编写代码(在pipelines.py中新增)

    import codecs,json
    
    
    class JsonCreatePipeline(object):
        """
        将数据保存到json文件,由于文件编码问题太多,这里用codecs打开,可以避免很多编码异常问题
            在类加载时候自动打开文件,制定名称、打开类型(只读),编码
            重载process_item,将item写入json文件,由于json.dumps处理的是dict,所以这里要把item转为dict
            为了避免编码问题,这里还要把ensure_ascii设置为false,最后将item返回回去,因为其他类可能要用到
            调用spider_closed信号量,当爬虫关闭时候,关闭文件
        """
        def __init__(self):
            self.file = codecs.open('spiderdata.json', 'w', encoding="utf-8")
    
        def process_item(self, item, spider):
            lines = json.dumps(dict(item), ensure_ascii=False) + "\n"
            self.file.write(lines)
            return item
    
        def spider_closed(self, spider):
            self.file.close()
    
    

    启用pipelines

    写好代码后,还需要在settings中启用,然后在settings的ITEM_PIPELINES处将JsonCreatePipeline配置进去就可以运行了:

    'rspider.pipelines.JsonCreatePipeline':200,  # 开启json文件保存  数字任意
    

    它会自动为你创建一个名为spiderdata.json的文件,里面写满了你爬到的数据,你可以在Pycharm中直接打开它,并且通过快捷键格式化数据(这样你才能更好的阅读数据和校验数据)。

    结语

    爬虫编写过程中,很重要的一步就是校验数据,因为数据是可变的,如果你不去校验它,那么入库的时候就会产生很多的麻烦。我的做法是边写边校验,以确保能够及时的修正代码。

    相关文章

      网友评论

          本文标题:scrapy框架-将数据写入json文件

          本文链接:https://www.haomeiwen.com/subject/rnbjpftx.html