第四章 信息存储
前面三章介绍了如何爬取以及筛选信息,而这些信息呢都是输出到控制台的。那这一章,我们要学习如何将这些信息持久化存储,方便我们以后的使用。
接下来我们要学习的信息存储技术有: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()
这一章相对来说比较简单,小伙伴可以结合之前学到的知识来练习爬虫,平时我们使用最多的是使用数据库来进行持久化存储。