存储爬取数据的经验之谈

这几年学习爬虫,常常遇到一个棘手的问题是对数据的存储上,爬下的数据往往花很大时间在不同的库表之间搬移,总结下来遇到的麻烦无外乎几点:

  • 表字段的设计改动频繁
  • 爬取数据的规模过大影响易操作性

爬虫抓取数据后的存储参见存储爬虫抓取数据的5种方式比较,一般分如下几种方式:

  • 以json格式存储到文本文件
  • 存储到excel(或txt)
  • 存储到sqlite
  • 存储到mysql数据库
  • 存储到mongodb

这里预先注意的是,存储数据的json/txt/excel文件建议为utf-8编码。

1. 小规模数据

在实现成熟的爬虫之前,一般都是先对小规模数据进行分析,我结合个人经验浅谈一下怎么处理这些数据:

1.1. 脏数据

一般是用requests库先爬取小部分脏数据,存储到txt或json文件中,而后再本地对其进一步清洗等操作(存到本地后,遇到断网等问题也不会影响爬虫对其分析)。这样一来节省时间,二是可以直观地看到数据的大体样貌(比如格式等),便于后续进一步制定对数据的处理方案。

txt文件中的数据可以是比如html整个网页代码等,更推荐json文件存储初步清洗后的数据雏形,它可按字段提取数据,参考python读写json文件

1.2. 清洗后的数据(初步)

选取脏数据的一部分作为样本,在对其清洗后,因为此时数据已初具规范,同时又有科学计算的需要,可将其装入excel文件中。一份excel文件对应数据库的一张表(也可一份excel文件存多个工作簿对应多张表),利用excel自带的强大功能对这些清洗过的数据进行再次分析或简单的科学计算,比如通过excel自带的函数模拟对表间数据迁移、表自增索引的操作,参见在excel输入1到1000连续序号的方法Excel中怎么跨表格批量查找匹配数据?Excel填充公式只会向下拖动?你out了,Ctrl快速填充,1秒搞定,甚至生成统计图进行可视化分析也是很方便的。同时考虑到对初步清洗后的数据,制定哪些字段用于分类往往存在疑问,采用excel文件存储就可适时修改字段。

对应编程若用pyhon作科学计算,建议jupyter+pandas+numpy+matplotlib这套组合。

python读取excel文件一般有xlrd、xlwt、openpyxl,看个人喜好,参考:

1.3. 清洗后的数据(整理)

这时候数据已经分析的差不多了,剩下重要的是对数据的整理,包括数据的存储格式、存储字段的选择等。

从excel文件导出数据有几种方向:

  • excel文件导出为json文件,适合文件传输、脚本读写文件
  • excel文件导出为mongodb的表,适合规范化存储

对于导出为json文件,网上有现成的工具转换,参考一秒完成Excel转JSON。python读写json文件相比excel文件来说更方便一些,采用内置的json库就可解析,而无需安装第三方库如openpyxl等,更易于对你的项目进行打包。

对于导出为数据库表,此时整理的数据所选字段已基本定型,可以导入库中。推荐mongodb,导入库中的数据若还想进行字段的修改操作,mongodb可动态添加字段的优点无疑满足这一需求。python的pymongo和mongo-engine是针对mongodb的持久化框架,pymongo支持mongodb原声语句的操作,mongo-engine是在pymongo基础上的一层包装,添加了对mongodb的对象映射。

excel文件与数据库之间的转换可用navicat操作,参考如何使用Navicat从xlsx文件导入数据库表?navicat如何导出查询结果数据成excel

若考虑数据库的轻量化,也可采用sqlite,通过python的peewee库对其中的表建立映射对象操作数据,不过sqlite由于其sql语法的局限性变得不那么灵活。

2. 大规模数据

等到数据的分析模型已经建立好了,数据存储的字段也没有什么大的改动,此时可以抡上scapy+分布式爬虫+多进程这个大杀器,存储数据于mysql等成熟的关系型数据库中,具体怎么实现就不再赘述了。对scrapy感兴趣的人推荐《learning scrapy》这本书。

总结

由此可见,爬取数据时,对小规模数据的试水是最重要的一步,它往往决定了以后数据模型的确立以及爬取方式的选择,总之尽量避免还未彻底搞清数据的具体构成之前,一上来就大批量爬取这种毛糙的做法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值