开发者社区> 中乘风> 正文

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

简介: 使用背景 有时候为了做测试,不想去数据库设置字段,设置musql字段实在是太麻烦了,这种情况下可以先把存储到json文件中,并观察数据的正确性,如果数据没问题了,再改成mysql存储即可。
+关注继续查看

使用背景

有时候为了做测试,不想去数据库设置字段,设置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中直接打开它,并且通过快捷键格式化数据(这样你才能更好的阅读数据和校验数据)。

结语

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

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
蚂蚁金服通信框架SOFABolt解析 | 协议框架解析
Scalable Open Financial Architecture 是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。
576 0
Python爬虫入门教程 31-100 36氪(36kr)数据抓取 scrapy
1. 36氪(36kr)数据----写在前面 今天抓取一个新闻媒体,36kr的文章内容,也是为后面的数据分析做相应的准备的,预计在12月底,爬虫大概写到50篇案例的时刻,将会迎来一个新的内容,系统的数据分析博文,记得关注哦~ 36kr 让一部分人先看到未来,而你今天要做的事情确实要抓取它的过去。
9486 0
javascript判断数据类型
js六大数据类型:number、string、object、Boolean、null、undefined string: 由单引号或双引号来说明,如"string" number:什么整数啊浮点数啊都叫数字,你懂的~ Boolean: 就是true和false啦 undefined:未定义,就是你创建一个变量后却没给它赋值~ null: 故名思久,null就是没有,什么也不表示 object: 这个我也很难解释的说。
729 0
蚂蚁金服通信框架SOFABolt解析 | 编解码机制
Scalable Open Financial Architecture是蚂蚁金服自主研发的金融级分布式中间件,包含了构建金融级云原生架构所需的各个组件,是在金融场景里锤炼出来的最佳实践。
633 0
Dozer对象映射框架Map到JSONString映射问题排查
## 引言 Dozer是一个优秀的对象映射的框架,可以帮助程序员减少大量的对象之间映射的get/set代码,在ATA上有好几篇文章介绍了dozer的使用: [dozer开发手册](http://www.atatech.org/articles/31144) [使用Dozer帮你提高开发效率(解决繁琐的DO转BO、TO转BO问题)](http://www.atatech.org/article
4694 0
MVC框架模式技术实例(用到隐藏帧、json、仿Ajax、Dom4j、jstl、el等)
前言: 刚刚学完了MVC,根据自己的感悟和理解写了一个小项目。 完全按照MVC模式,后面有一个MVC的理解示意图。 用MVC模式重新完成了联系人的管理系统: 用户需求: 多用户系统,提供用户注册、登录功能,对于没有登录的用户,不允许使用任何功能。
978 0
Scrapy框架-通过scrapy_splash解析动态渲染的数据
前言 对于那些通过JS来渲染数据的网站,我们要解析出它的html来才能取到想要的数据,通常有两种解决办法: 1、通过selenim调用浏览器(如chrome firefox等)来爬取,将解析的任务交给浏览器。
2139 0
纯前端JSON文件编辑器[0]
准备工作 参考资料: FileReader(用来获取上传文件的数据) (用来设置下载文件的名称) Blob(用来存储数据的一个容器) createObjectURL(用来将一个Blog对象转换为Base64格式资源的API) 前言:     因前段时间给老板做了个在线编辑lua文件的小工具,期间用到了上述几个新的API,感觉挺有意思,所以决定做一个在线编辑JSON文件的例子show出来,并重新捋一遍思路。
955 0
+关注
中乘风
中乘风,生于海南,中国《英雄联盟》电子竞技职业选手,RNG战队上单。 2015年加入RNG战队并帮助队伍获得2017年LPL春季赛亚军、2017年LPL夏季赛亚军、2017年全球总决赛四强、2018年LPL春季赛冠军、2018年MSI季中赛冠军、RNG队伍2018英雄联盟洲际赛冠
27
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
JS零基础入门教程(上册)
立即下载
性能优化方法论
立即下载
手把手学习日志服务SLS,云启实验室实战指南
立即下载