前面三章介绍了如何爬取以及筛选信息,而这些信息呢都是输出到控制台的。那这一章,我们要学习如何将这些信息持久化存储,方便我们以后的使用。
接下来我们要学习的信息存储技术有:json 、csv 、mysql 。
大家可以根据需要来选择信息存储方式。
4.1 JSON
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。与python的字典很像,用法也差不多。
JSON 的数据类型:
对象:使用花括号包裹 {} 起来的内容。如:{key:value} value可以是任何类型的数据
列表:方括号 [] 包裹起来的内容。如:[1,"python",{key:value}]
字符串:双引号包裹起来的内容。如:"python"
tips:JSON本质是一个字符串
dumps 跟 dump
# 第一步 导入json
import json
books = [
{
id: 1,
name: '三国演义',
price: ''
},
{
id: 2,
name: '水浒传',
price: ''
},
{
id: 3,
name: '红楼梦',
price: ''
}
]
# 使用dumps 将python对象转化成json
text = json.dumps(books)
print(text, '---', type(text))
# 使用dump 将python对象自动转化成json后存入文件
with open('book.json', 'w', encoding='utf-8') as fp:
json.dump(books, fp, ensure_ascii=False)
tips:dump 默认使用的编码格式是ascii ,在存储中文数据时,需要将其关闭,方式为ensure_ascii=False,另外还需要在打开文件的时候指定编码,如encoding='utf-8' 。
loads 跟 load
import json
text = '{"book":"python"}'
# 使用loads 将json字符串转化成python对象
book = json.loads(text)
# 使用load 读取json文件并自动转化成python对象
with open('book.json', 'r', encoding='utf-8') as fp:
book = json.load(fp)
小结:
将python对象转化成json 的方式 dumps 、 dump (写入文件)
将json 转化成python对象的方式 loads 、load (从读取中读取)
4.2 CSV
CSV又叫逗号分隔值,因为在大部分CSV的表中每个字段都以, 作为分隔符。跟Excel 类似
详情可自行百度。
读取CSV文件:
import csv
with open('books.csv', 'r') as fp:
# reader是一个迭代器,存储的是一个个列表
reader = csv.reader(fp)
for x in reader:
# x为列表
print(x) # 每次都打印一行数据
with open('books.csv', 'r') as fp:
# reader是一个迭代器,存储的是一个个字典
reader = csv.DictReader(fp)
for x in reader:
# x为字典
print(x) # 每次都打印一行数据
写入CSV文件:
import csv
headers = {'name','age'}
values = [
('张三', 18), ('李四', 20)
]
# newline='' 每写入一行都不进行换行
with open('person.csv', 'w', encoding='utf-8', newline='') as fp:
writer = csv.writer(fp)
# 写入头部
writer.writerow(headers)
# 写入内容 一次性写入全部内容
writer.writerows(values)
# 以字典写入
headers = {'name','age'}
values = [
{'name':'张三', 'age':'18'},
{'name':'李四', 'age':'20'},
]
with open('person.csv', 'w', encoding='utf-8') as fp:
writer = csv.DictWriter(fp, headers)
# 写入头部
writer.writeheader()
# 写入内容 一次性写入全部内容
writer.writerows(values)
4.3 Mysql
mysql 的安装及使用教程在我的另一篇博客 Mysql学习(全) 写的蛮详细的,这里就只介绍在python中如何通过代码来连接mysql。
python 可使用pymysql 来连接本地的mysql
首先,需要先安装pymysql :pip install pymysql
简单查询:
# 第一步 导入pymysql
import pymysql
# 第二步 建立连接
conn = pymysql.connect(
host='localhost', # 主机
user='root', # 用户名
password='xxx', # 密码
database='test', # 要连接的数据库
post=3306 # mysql的端口号,一般为3306
)
# 创建游标
cursor = conn.cursor()
# 定义sql语句
sql = 'select * from user'
# 查询数据
cursor.execute(sql)
# 获取查询内容
result = cursor.fetchone()
print(result)
# 关闭连接
conn.close()
tips:
- fetchone():每次获取一条数据。
- fetchall():获取全部返回结果。
- fecthmany(size):每次获取size条数据。
增删改:
import pymysql
# 建立连接
conn = pymysql.connect(
host='localhost', # 主机
user='root', # 用户名
password='xxx', # 密码
database='test', # 要连接的数据库
post=3306 # mysql的端口号,一般为3306
)
cursor = conn.cursor()
# 即使表中的字段是整形或其他类型 都要写成%s格式
sql = "insert into user values(%s,%s)"
# 填好参数
cursor.execute(sql,('杭', 18))
# 提交
conn.commit()
# 关闭连接
conn.close()
tips:
- 连接对象负责创建游标跟提交事务,游标对象负责执行sql语句跟获取查询结果。
- 增删改操作都需要commit()
这一章相对来说比较简单,小伙伴可以结合之前学到的知识来练习爬虫,平时我们使用最多的是使用数据库来进行持久化存储。