爬蟲教程---第四章 信息存儲

第四章 信息存儲

前面三章介紹瞭如何爬取以及篩選信息,而這些信息呢都是輸出到控制檯的。那這一章,我們要學習如何將這些信息持久化存儲,方便我們以後的使用。

接下來我們要學習的信息存儲技術有:jsoncsvmysql

大家可以根據需要來選擇信息存儲方式。

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)

tipsdump 默認使用的編碼格式是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 的方式 dumpsdump (寫入文件)
  • json 轉化成python對象的方式 loadsload (從讀取中讀取)

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

首先,需要先安裝pymysqlpip 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()

這一章相對來說比較簡單,小夥伴可以結合之前學到的知識來練習爬蟲,平時我們使用最多的是使用數據庫來進行持久化存儲。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章