python | 爬蟲筆記(五)- 數據存儲
阿新 • • 發佈:2018-09-28
height iter use jordan rip 輕量 數據存儲 回滾 nosql
JavaScript 對象標記,通過對象和數組的組合來表示數據,構造簡潔但是結構化程度非常高,它是一種輕量級的數據交換格式。一切皆對象,常用的是對象和數組
對象 數據結構為 {key1:value1, key2:value2, ...} 的鍵值對結構
數組 數據結構為 ["java", "javascript", "vb", ...] 的索引結構
5.1 文件存儲
先用request把源碼獲取,再用解析庫解析,保存到文本1- txt
文本打開方式:file = open(‘explore.txt‘, ‘a‘, encoding=‘utf-8‘) #a代表以追加的方式寫入文本 file.write(‘\n‘.join([question, author, answer])) file.write(‘\n‘ + ‘=‘ * 50 + ‘\n‘) file.close()r 只讀 rb 二進制只讀 r+ 讀寫 rb+ 二進制讀寫 w 只用於寫入 wb 二進制寫入 w+ 讀寫,存在覆蓋,不存在新建 a 追加 a+ 追加讀寫
2- Json
· 一個Json對象
[{ "name": "Bob", "gender": "male", "birthday": "1992-10-18" }, { "name": "Selina", "gender· 讀取Json loads() 方法將 Json 文本字符串轉為 Json 對象,可以通過 dumps()方法將 Json 對象轉為文本字符串。": "female", "birthday": "1995-10-18" }]
data = json.loads(str) print(data) 讀取json文件 with open(‘data.json‘, ‘r‘) as file: str = file.read() data = json.loads(str) print(data)· 輸出Json
3- CSV
寫入import csv with open(‘data.csv‘, ‘w‘) as csvfile: writer = csv.writer(csvfile) writer.writerow([‘id‘, ‘name‘, ‘age‘]) writer.writerows([[‘10001‘, ‘Mike‘, 20], [‘10002‘, ‘Bob‘, 22], [‘10003‘, ‘Jordan‘, 21]])
讀取
import pandas as pd df = pd.read_csv(‘data.csv‘) print(df)
5.2 關系型數據庫
rdb- 二維表存儲;可通過主鍵外鍵關聯1- MySQL存儲
pymysql 內容包括:連接數據庫、創建表、插入數據、刪除、查詢 一般流程:import pymysql db = pymysql.connect(host=‘localhost‘,user=‘root‘, password=‘123456‘, port=3306) #connect()方法聲明一個連接對象 cursor = db.cursor() sql = ‘‘ try: cursor.execute(sql, (id, user, age)) db.commit() except: db.rollback() #事務回滾,保證數據一致性 db.close()
關系型數據庫屬性:
5.3 非關系型數據庫
NoSQL 是基於鍵值對的,而且不需要經過 SQL 層的解析,數據之間沒有耦合性,性能非常高。 細分- 對於爬蟲的數據存儲來說,一條數據可能存在某些字段提取失敗而缺失的情況,而且數據可能隨時調整,另外數據之間能還存在嵌套關系,因此多采用NoSQL。常用的是MongoDB和Redis1- MongoDB
在 MongoDB 中,每條數據其實都有一個 _id 屬性來唯一標識,如果沒有顯式指明 _id,MongoDB 會自動產生一個 ObjectId 類型的 _id 屬性。insert() 方法會在執行後返回的 _id 值。##本系列內容為《python3爬蟲開發實戰》學習筆記。本系列博客列表如下:
(零)學習路線
(一)開發環境配置
(二)爬蟲基礎
(三)基本庫使用
(四)解析庫使用
(五)數據存儲
(六)Ajax數據爬取
(七)動態渲染頁面爬取Selenium
持續更新...
對應代碼請見:..
python | 爬蟲筆記(五)- 數據存儲