这一系列文章是我在阅读“Python3网络爬虫开发实践”一书以及其他线上资料学习爬虫过程中的一些笔记和心得,希望能分享给大家。
章节概述:本章介绍解析数据后的数据存储
章节结构:
- 文件存储
- 关系型数据库存储
- 非关系型数据库存储
具体内容:
- 文件存储
TXT文本:requests获取内容 --- pyquery解析 --- 提取内容保存至文档(open,file.write etc.)
JSON文本:JavaScript Object Notation JS对象标记。 Python可以用json库进行JSON的读写操作,通过loads方法将JSON文本字符串转为JSON对象(注意键值和值要用双引号括起来)。可以通过dumps方法将JSON对象转为文本字符串。
CSV文本:Comma-Separated Values 逗号分隔值/字符分隔值。以纯文本形式存储数据,字段间额分隔符是其他字符或字符串,比如都好或者制表符。Python有csv库支持读写。通过创建writer对象,调用writerow方法。或者DictWriter对象,调用writeheader和writerow。读取通过reader对象。
- 关系型数据库存储
关系型数据库基于关系模型。通过二维表保存。它的存储方式就是行列组成的表,每一列是一个字段,每一行是一条记录。表可以看作某个实体的集合。例:MySQL,Oracle,SQL Server。
Python中主要使用PyMySQL库,首先通过pymysql对象调用connect方法进行数据库连接,通过cursor创建执行对象,通过exect(SQL语句)开始查询或者表格创建等数据库操作,通过fetchone获取一条数据或者fetchall获取全部结果。SQL语句中的变量可以用%格式化符来代替,然后exect调用(SQL语句,(变量值))
最后通过commit将刚刚的语句真正的传入数据库进行操作。如果出现异常可以用rollback。
这里涉及的操作,满足ACID特性,即:
原子性(Atomicity):事务是一个不可分割的工作单位,事物中包括的操作要么都做,要么都不做。
一致性(Consitency):事务必须使数据从一个一致性状态变到另一个一致性状态。
隔离性(Isolation):一个事务的执行不能被其他事务干扰,彼此隔离
持久性(Durability):一个事务一旦提交,他对数据库数据的改变使永久的。
- 非关系型数据库存储 NoSQL(Not only SQL)
键值存储数据库:Redis,Voldemort,Oracle BDB
列存储数据库: Cassandra, HBase, Riak
文档型数据库: CouchDB,MongoDB
图形数据库:Neo4J,InfoGrid,Infinite Graph etc
使用非关系型数据库存储爬虫爬取的结果可以避免某些字段提取失败,和必须提前建表或者数据嵌套关系的情况。
Python使用MongoDB ---- pymongo库
创建MongoClien对象,通过mongoclient.db_name/mongoclient['db_name']指定操作数据库,再用指定的数据库db.collections_name/db['collections_name']指定集合,通过collections调用insert,insert_one,insert_many,find_one,find,sort,update,remove,delete_one和比较符号,功能符号协同进行数据库插入和查询等操作
比较符号
功能符号
Python使用Redis ---- redis-py库
通过Redis和StrictRedis两个类实现Redis数据库的操作。这个库操作功能复杂,建议看官网学习。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。