簡介html
------------------文件存儲------------------python
TXT文本存儲mysql
JSON文件存儲redis
CSV文件存儲sql
------------------關係型數據庫---------------數據庫
MySQL存儲json
------------------非關係數據庫---------------api
Mongodb安全
redis網絡
咱們前面不多將提取的數據或者獲取的源碼保存下來;其實平常的工做中在解析出數據後接下來就是存儲數據。
保存數據的形式有多種多樣txt\json\csv\mysql\mobgodb\redis
,接下來咱們一一介紹。
python txt文件操做中離不開open()函數,它能夠建立或者打開指定的文件,並建立一個文件對象 ,基本的語法:
1 open() 函數用於建立或打開指定文件,該函數的語法格式以下: 2 file = open(file_name,"文件打開方式")
文件打開的方式有如下幾種:
模式 | 意義 | 注意事項 |
---|---|---|
r | 只讀模式打開文件,讀文件內容的指針會放在文件的開頭。 | 操做的文件必須存在。 |
rb | 以二進制格式、採用只讀模式打開文件,讀文件內容的指針位於文件的開頭,通常用於非文本文件,如圖片文件、音頻文件等。 | |
r+ | 打開文件後,既能夠從頭讀取文件內容,也能夠從開頭向文件中寫入新的內容,寫入的新內容會覆蓋文件中等長度的原有內容。 | |
rb+ | 以二進制格式、採用讀寫模式打開文件,讀寫文件的指針會放在文件的開頭,一般針對非文本文件(如音頻文件)。 | |
w | 以只寫模式打開文件,若該文件存在,打開時會清空文件中原有的內容。 | 若文件存在,會清空其原有內容(覆蓋文件);反之,則建立新文件。 |
wb | 以二進制格式、只寫模式打開文件,通常用於非文本文件(如音頻文件) | |
w+ | 打開文件後,會對原有內容進行清空,並對該文件有讀寫權限。 | |
wb+ | 以二進制格式、讀寫模式打開文件,通常用於非文本文件 | |
a | 以追加模式打開一個文件,對文件只有寫入權限,若是文件已經存在,文件指針將放在文件的末尾(即新寫入內容會位於已有內容以後);反之,則會建立新文件。 | |
ab | 以二進制格式打開文件,並採用追加模式,對文件只有寫權限。若是該文件已存在,文件指針位於文件末尾(新寫入文件會位於已有內容以後);反之,則建立新文件。 | |
a+ | 以讀寫模式打開文件;若是文件存在,文件指針放在文件的末尾(新寫入文件會位於已有內容以後);反之,則建立新文件。 | |
ab+ | 以二進制模式打開文件,並採用追加模式,對文件具備讀寫權限,若是文件存在,則文件指針位於文件的末尾(新寫入文件會位於已有內容以後);反之,則建立新文件。 |
熟悉/瞭解上面的知識點後(詳細信息:菜鳥教程/w3school),咱們實例一下;
小說網站:https://xs.sogou.com/mianfei/ 獲取書名、簡潔並保存爲txt文件:
1 import requests 2 import json 3 #設置ua 4 headers = { 5 "User-Agent": "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3941.4 Safari/537.36", 6 } 7 #獲取網頁源代碼 8 r = requests.get("https://xs.sogou.com/api/pc/v1/activity/freeread/current?pageNo=1&pageSize=12",headers=headers).text 9 #json格式一下 10 html = json.loads(r) 11 #接下來就是獲取數據 12 name = html["data"]["pageList"] 13 for i in name: 14 bookName = i["bookName"] 15 content = i["description"] 16 #寫入數據 17 with open("小說.txt","a",encoding="utf-8") as f: 18 f.write(bookName) 19 f.write(content) 20 f.write("\n"+ "==" * 20 + "\n") 21 print("已寫入......") 22 with as的方式實現數據存儲好處:不須要調用close()方法 23 以上寫入還可使用: 24 file = open("小說.txt","a",encoding="utf-8" ) 25 file.write(bookName) 26 file.write(content) 27 file.write("\n"+ "==" * 20 + "\n") 28 print("已寫入......") 29 最後結果都是同樣的
注:有細心的同窗發現我用的url跟網站的url是不同的,這個是怎麼回事??
這樣咱們直接請求這個網址後獲得的就是一個json的數據文件,以後咱們解析一下就能夠了。
先官方話瞭解一下: JSON(JavaScript Object Notation) 是一種輕量級的數據交換格式。它基於ECMAScript的一個子集。
JSON採用徹底獨立於語言的文本格式,可是也使用了相似於C語言家族的習慣(包括C、C++、Java、JavaScript、Perl、Python等)。
這些特性使JSON成爲理想的數據交換語言。易於人閱讀和編寫,同時也易於機器解析和生成(通常用於提高網絡傳輸速率)。
你讀一遍的話會懵逼的,不要慌,你暫時不要管,學習它經常使用的:
json: 用於字符串和python數據類型間進行轉換 ,它提供四個功能 dumps、dump、loads、load ,用的比較多的是(loads,dumps)下面咱們學習下。
loads():將JSON文本字符串轉換成JSON對象;
dumps():將JSON對象轉換成JSON文本字符串;
1 #在咱們上面的小說例子中,咱們使用的就是loads() 2 import json 3 4 test_dict = {'bigberg': [7600, {1: [['iPhone', 6300], ['Bike', 800], ['shirt', 300]]}]} 5 print(test_dict) 6 print(type(test_dict)) 7 #dumps 將數據轉換成字符串 8 json_str = json.dumps(test_dict) 9 print(json_str) 10 print(type(json_str)) 11 #loads: 將字符串轉換爲字典 12 new_dict = json.loads(json_str) 13 print(new_dict) 14 print(type(new_dict))
dump: 將數據寫入json文件中 ; load:把文件打開,並把字符串變換爲數據類型 ;有興趣的同窗能夠學習一下用法。
使用csv文件存儲,我理解的就是表格存儲,Excel都用過吧,就是那個;接下來咱們分文件的寫入跟讀取兩部分分開講解,請繫好安全帶(若是非要介紹定義的話,請百度......我就是懶);
簡單寫入,首先打開一個csv文件,指定打開的模式而後使用write()方法初始化寫入對象,最後調用writerow()方法傳入每行的數據便可,代碼以下:
1 import csv 2 #若是不加newline參數的話,會自動這隻每行換行,以下圖所示 3 #加上之後就不會出現下圖的問題,小技巧,你值得擁有 4 with open("name.csv","w",newline="") as f: 5 writer = csv.writer(f) 6 #傳入的是一個列表 7 writer.writerow(["num","name","age","sex"]) 8 writer.writerow(["100","你",12,"男"]) 9 writer.writerow(["101","好",13,"女"])
效果圖以下:
能夠看到還有排版的問題,更多的功能等你發掘;
簡單讀取:咱們須要構造reader對象,經過遍歷的方式輸出每行的信息;代碼及效果圖以下:
1 import csv 2 3 with open("name.csv",'r') as f: 4 reader = csv.reader(f) 5 for i in reader: 6 print(i) 7 8 #接觸到pandas的話你會了解到read_csv()方法: 9 import pandas as pd 10 df = read_csv("name.csv") 11 print(df)
這個要比第一個方式舒服不少。。。。。