第四章 信息存儲
前面三章介紹瞭如何爬取以及篩選信息,而這些信息呢都是輸出到控制檯的。那這一章,我們要學習如何將這些信息持久化存儲,方便我們以後的使用。
接下來我們要學習的信息存儲技術有: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.DistReader(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.DistWriter(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.conn(
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.conn(
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()
這一章相對來說比較簡單,小夥伴可以結合之前學到的知識來練習爬蟲,平時我們使用最多的是使用數據庫來進行持久化存儲。