1. 程式人生 > >爬蟲1.3-資料儲存

爬蟲1.3-資料儲存

目錄

爬蟲-資料儲存

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