python爬蟲#資料儲存#JSON/CSV/MYSQL/MongoDB/
Json資料處理
JSON支援資料格式:
物件(字典)。使用花括號。
陣列(列表)。使用方括號。
整形、浮點型、布林型別還有null型別。
字串型別(字串必須要用雙引號,不能用單引號)。
多個數據之間使用逗號分開。
注意:json本質上就是一個字串。
字典和列表轉JSON:
import json
books = [
{
'title': '鋼鐵是怎樣練成的',
'price': 9.8
},
{
'title': '紅樓夢',
'price': 9.9
}
]
json_str = json.dumps(books,ensure_ascii=False)
print(json_str)
因為json在dump的時候,只能存放ascii的字元,因此會將中文進行轉義,這時候我們可以使用ensure_ascii=False
在Python中。只有基本資料型別才能轉換成JSON格式的字串。也即:int、float、str、list、dict、tuple。
將json資料直接dump到檔案中:
json模組中除了dumps函式,還有一個dump函式,這個函式可以傳入一個檔案指標,直接將字串dump到檔案中。
books = [
{
'title': '鋼鐵是怎樣練成的',
'price': 9.8
},
{
'title': '紅樓夢',
'price': 9.9
}
]
with open('a.json','w') as fp:
json.dump(books,fp)
將一個json字串load成Python物件:
json_str = '[{"title": "鋼鐵是怎樣練成的", "price": 9.8}, {"title": "紅樓夢", "price": 9.9}]'
books = json.loads(json_str,encoding='utf-8')
print(type(books))
print(books)
直接從檔案中讀取json:
import json
with open('a.json','r',encoding='utf-8') as fp:
json_str = json.load(fp)
print(json_str)
csv檔案處理
讀取csv檔案:
import csv with open('stock.csv','r') as fp: reader = csv.reader(fp) titles = next(reader) for x in reader: print(x)
這樣操作,以後獲取資料的時候,就要通過下表來獲取資料。如果想要在獲取資料的時候通過標題來獲取。那麼可以使用DictReader
import csv
with open('stock.csv','r') as fp:
reader = csv.DictReader(fp)
for x in reader:
print(x['turnoverVol'])
寫入資料到csv檔案:
寫入資料到csv檔案,需要建立一個writer物件,主要用到兩個方法。一個是writerow
,這個是寫入一行。一個是writerows
,這個是寫入多行
import csv
headers = ['name','age','classroom']
values = [
('zhiliao',18,'111'),
('wena',20,'222'),
('bbc',21,'111')
]
with open('test.csv','w',newline='') as fp:
writer = csv.writer(fp)
writer.writerow(headers)
writer.writerows(values)
也可以使用字典的方式把資料寫入進去。這時候就需要使用DictWriter
import csv
headers = ['name','age','classroom']
values = [
{"name":'wenn',"age":20,"classroom":'222'},
{"name":'abc',"age":30,"classroom":'333'}
]
with open('test.csv','w',newline='') as fp:
writer = csv.DictWriter(fp,headers)
writer = csv.writeheader()
writer.writerow({'name':'zhiliao',"age":18,"classroom":'111'})
writer.writerows(values)
MySQL處理資料
安裝驅動程式:
Python要想操作MySQL。必須要有一箇中間件,或者叫做驅動程式。驅動程式有很多。比如有mysqldb、mysqlclient、pymysql等。在這裡,我們選擇用pymysql。安裝方式也是非常簡單,通過命令pip install pymysql即可安裝。
資料庫連線:
資料庫連線之前。首先先確認以下工作完成,這裡我們以一個pymysql_test資料庫.以下將介紹連線mysql的示例程式碼:
import pymysql
db = pymysql.connect(
host="127.0.0.1",
user='root',
password='root',
database='pymysql_test',
port=3306
)
cursor = db.cursor()
cursor.execute("select 1")
data = cursor.fetchone()
print(data)
db.close()
插入資料:
import pymysql
db = pymysql.connect(
host="127.0.0.1",
user='root',
password='root',
database='pymysql_test',
port=3306
)
cursor = db.cursor()
sql = """
insert into user(
id,username,gender,age,password
)
values(null,'abc',1,18,'111111');
"""
cursor.execute(sql)
db.commit()
db.close()
如果在資料還不能保證的情況下,可以使用以下方式來插入資料:
sql = """
insert into user(
id,username,gender,age,password
)
values(null,%s,%s,%s,%s);
"""
cursor.execute(sql,('spider',1,20,'222222'))
查詢資料:
使用pymysql查詢資料。可以使用fetch*方法。
fetchone():這個方法每次之獲取一條資料。
fetchall():這個方法接收全部的返回結果。
fetchmany(size):可以獲取指定條數的資料。
cursor = db.cursor()
sql = """
select * from user
"""
cursor.execute(sql)
while True:
result = cursor.fetchone()
if not result:
break
print(result)
db.close()
或者是直接使用fetchall
,一次性可以把所有滿足條件的資料都取出來:
cursor = db.cursor()
sql = """
select * from user
"""
cursor.execute(sql)
results = cursor.fetchall()
for result in results:
print(result)
db.close()
或者是使用fetchmany
,指定獲取多少條資料:
cursor = db.cursor()
sql = """
select * from user
"""
cursor.execute(sql)
results = cursor.fetchmany(1)
for result in results:
print(result)
db.close()
刪除資料:
cursor = db.cursor()
sql = """
delete from user where id=1
"""
cursor.execute(sql)
db.commit()
db.close()
更新資料:
conn = pymysql.connect(host='localhost',user='root',password='root',database='pymysql_demo',port=3306)
cursor = conn.cursor()
sql = """
update user set username='aaa' where id=1
"""
cursor.execute(sql)
conn.commit()
conn.close()
MongoDB
將MongoDB製作成windows服務:
啟動mongodb後,如果想讓mongodb一直執行,那麼這個終端便不能關閉,而且每次執行的時候還需要指定data的路徑。因此我們可以將mongodb製作成一個服務,以後就通過一行命令就可以運行了。以下將講解如何製作服務:
建立配置檔案:在mongodb安裝的路徑下建立配置檔案mongod.cfg(路徑和名字不是必須和我這的一樣),然後在配置檔案中新增以下程式碼:
logpath=D:\ProgramApp\mongodb\data\log\mongod.log
dbpath=D:\ProgramApp\mongodb\data\db
logpath是日誌的路徑。dbpath是mongodb資料庫的儲存路徑。
安裝mongodb服務:
使用以下命令即可將mongodb安裝成一個服務:
mongod --config "cfg配置檔案所在路徑" --install
比如:
mongod --config "D:\ProgramApp\mongodb\mongod.cfg" --install
啟動mongodb:net start mongodb。
關閉mongodb: net stop mongodb。
移除mongodb:"D:\ProgramApp\mongodb\bin\mongod.exe" --remove。
MongoDB概念介紹:
SQL術語/概念 MongoDB術語/概念 解釋/說明
database database 資料庫
table collection 資料庫表/集合
row document 資料記錄行/文件
column field 資料欄位/域
index index 索引
joins joins 表連線,MongoDB不支援
primary key/primary key 主鍵,MongoDB自動將_id欄位設定為主鍵
MongoDB三元素:
三元素:資料庫、集合、文件。
文件(document):就是關係型資料庫中的一行。文件是一個物件,由鍵值對構成,是json的擴充套件形式:
{'name':'abc','gender':'1'}
集合(collection):就是關係型資料庫中的表。可以儲存多個文件,結構可以不固定。如可以儲存如下文件在一個集合中:
{"name":"abc","gender":"1"}
{"name":"xxx","age":18}
{"title":'yyy','price':20.9}
MongoDB基本操作命令:
db:檢視當前的資料庫。
show dbs:檢視所有的資料庫。
use 資料庫名:切換資料庫。如果資料庫不存在,則建立一個。(建立完成後需要插入資料庫才算建立成功)
db.dropDatabase():刪除當前指向的資料庫。
db.集合名.insert(value):新增資料到指定的集合中。
Python操作MongoDB:
安裝pymongo:
要用python操作mongodb,必須下載一個驅動程式,這個驅動程式就是pymongo:
pip install pymongo
連線MongoDB:
import pymongo
# 獲取連線的物件
client = pymongo.MongoClient('127.0.0.1',port=27017)
# 獲取資料庫
db = client.zhihu
# 獲取集合(表)
collection = db.qa
# 插入一條資料到集合中
collection.insert_one({
"username":"abc",
"password":'hello'
})
資料型別:
型別 說明
Object ID 文件ID
String 字串,最常用,必須是有效的UTF-8
Boolean 儲存一個布林值,true或false
Integer 整數可以是32位或64位,這取決於伺服器
Double 儲存浮點值
Arrays 陣列或列表,多個值儲存到一個鍵
Object 用於嵌入式的文件,即一個值為一個文件
Null 儲存Null值
Timestamp 時間戳,表示從1970-1-1到現在的總秒數
Date 儲存當前日期或時間的UNIX時間格式
操作MongoDB:
操作MongoDB的主要方法如下:
insert_one:加入一條文件資料到集合中。示例程式碼如下:
collection.insert_one({
"username":"abc",
"password":'hello'
})
insert_many:加入多條文件資料到集合中。
collection.insert_many([
{
"username":'abc',
'password':'111111'
},
{
"username":'bbb',
'password':'222222'
},
])
find_one:查詢一條文件物件。
result = collection.find_one()
print(result)
# 或者是指定條件
result = collection.find_one({"username":"abc"})
print(result)
update_one:更新一條文件物件。
collection.update_one({"username":"abc"},{"$set":{"username":"aaa"}})
update_many:更新多條文件物件。
collection.update_many({"username":"abc"},{"$set":{"username":"aaa"}})
delete_one:刪除一條文件物件。
collection.delete_one({"username":"abc"})
delete_many:刪除多條文件物件。
collection.delete_one({"username":"abc"})