爬蟲1.3-資料儲存
阿新 • • 發佈:2018-12-29
目錄
爬蟲-資料儲存
1. JSON檔案
1.1 JSON資料格式
json是一種輕量級資料交換格式,採用完全獨立於程式語言的文字格式來儲存和表示資料,簡潔清晰,適合前端和後端資料交換
JSON資料格式
1 物件(字典) 使用花括號{}
2 陣列(陣列) 使用方括號[]
3 整形、浮點型、布林型、null型
4 字串型別(字串必須要用雙引號,不能用單引號)
多個數據之間用逗號分開
json本質上就是一個字串 python中只有基本資料型別才能轉換成JSON格式,int float str list dict tuple
1.2 寫入
寫入方法一
persons = [{xxx}, {xxxxx}]
json_str = json.dumps(persons) # 此時列表之間被轉換成json標準格式(字串型別),然後一個檔案寫入就行了
fp.write(json_str)
寫入方法二
with open('xx.json', 'w', enconding='utf-8') as fp: json.dump(persons, fp, ensure_asciii=False) # 涉及到中文字元時這裡傳入三個引數,第一個就是包含大量字典的列表,第二個是檔案指標,第三個是將json函式預設轉換ascii碼關閉 另外檔案寫入時也要使用utf-8格式(enconding='utf-8')
1.3 讀取json
json_str = '[{"username": "laowang", "age": 18, "country": "china"}, {"username": "laoli", "age": 11, "country": "china"}]'
persons = json.loads(json_str) 這裡persons通過loads函式變成了一個物件,然後下方對其進行操作即可
for i in persons:
print(i)
with open('person.json', 'r', encoding='utf-8') as fp: persons = json.load(fp) 這時persons通過load函式變成了一個list類的物件,然後可以進行操作了 for i in persons: print(i)
dump\dumps load\loads 有s 則與字串有關 沒有s則與檔案有關
2. CSV檔案
2.1 csv資料格式
CSV檔案不是一個特定的檔案格式,泛指具有以下特徵的任何檔案:
1 純文字,使用某個字符集,如utf-8, unicode, ascii, gbk等
2 由記錄組成,典型的是每行一條記錄
3 每條記錄被分隔符分割為欄位 典型的分隔符有逗號 分號 製表符
4 每條記錄都有同樣的文字欄位 如 姓名 年齡 身高 體重 每條記錄都要有這四個欄位
2.2 寫入
CSV檔案寫入方法一:
headers = ['username', 'age', 'height']
data = [('張三', 18, 160),('lisi', 20, 213)]
with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:
#這裡的newlien引數是為了避免寫入後又多餘的換行
writer = csv.writer(fp)
writer.writerow(headers)
CSV檔案寫入方法二: 字典直接寫入
with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:
writer = csv.DictWriter(fp, headers) # 這裡直接使用DictWriter函式
writer.writerow(data) # writerow每次只寫入一條
with open('classroom.csv', 'w', encoding='utf-8', newline='') as fp:
writer = csv.DictWriter(fp, headers) # 這裡直接使用DictWriter函式
writer.writeheader() # 這裡必須先呼叫寫入頭部函式,否則沒有頭部
writer.writerows(data) # 多條資料,直接使用writerows全部寫入即可
3. mysql資料庫資料存入
import pymysql
db = pymysql.connect(
host='47.107.110.xx',
user='xxx',
password='xxx',
database='testdb', # 資料庫名
port=3306
)
這裡要理解,一個數據庫伺服器可以有多個數據庫,所以要選擇某個資料庫進行操作
新建表格的第一個欄位可以設定為自動增長,可以理解為id
sql = """
insert into user(id,username,age,password) values(null,%s,%s,%s)
"""
# 這裡使用%s是因為資料庫在處理時都先按照字串的
# null是id 它自動增長可以不用填寫
username = 'laowang'
age = 88
password = '123456' # 這樣就可以自己靈活施展了
cursor = db.cursor() # cursor是建立一個新的遊標,方便執行語句
cursor.execute(sql, (username, age, password)) # 這裡要傳入一個元組
db.commit() # 必須使用commit提交後, 資料庫的資料才會改變
db.close()
查詢資料:
fetchone() # 返回一條資料
fetchall() # 接收全部的返回結果
fetchmany(size) # 獲取定條數的資料
使用查詢語句後,要使用上述三條語句才能獲得結果,
result = cursor.fetchone() # 獲得一條資料(元組形式)
result = cursor.fetchall() # 獲得所有返回的資料((xxx,xxxx,xxx), (yyy,yyyy,yyy))
fetmany(size) # 得到的資料形式與fetchall類似
刪除資料:
使用sql = """delete from table where id=1;"""
然後cursor.execute(sql)
db.commit()
# 這裡刪除時只能刪除一整條記錄,插入,刪除,更新等資料修改操作都需要使用.commit()函式
更新資料
sql = """update table set username='xxx' where id=1;""" 這裡sql語句需要指明表 欄位 標識
如果不加id=1 就會把整個表的所有記錄中的usernam欄位都更新為xxx