在爬蟲相關的項目中,有時需要爬取各種數據結構的數據,為了更方便的存儲,我們通常會使用 MongoDB 進行存儲。
本文將使用 Python 連接 MongoDB ,對數據進行增刪改的操作實踐,讀者需要先對 Python 或 MongoDB 有一定的了解,能夠更快上手。
系統:windows 10 x64
Python:
MongoDB:
首先在本地啟動 MongoDB 服務,并使用 MongoDB Compass 連接到數據庫服務:
然后通過開發工具 Pycharm 上安裝工具庫 pymongo(pymongo是驅動程序,使python程序能夠使用MongoDB數據庫,用python編寫而成):
新建一個 .py 文件,編寫 MongoDB 的連接程序,通過查詢校驗連接是否成功:
# pymongo 庫中導入 MongoClient
from pymongo import MongoClient
# 連接 MongoDB 數據庫,通過 URL 的形式訪問
client=MongoClient('mongodb://localhost:27017/')
# 檢測客戶端連接,可以通過查詢文檔數據是否能正常查詢
for i in client.newdb.lightmap.find({}):
print(i)
如果未報錯,成功打印輸出,則連接成功:
{'_id': ObjectId('61bc3f6d9e58737faea3c5cc'), 'name': '故宮', 'city': '北京', 'country': '中國', 'gps': {'lat': 116.403, 'lng': 39.924}}
{'_id': ObjectId('61bc3f6d9e58737faea3c5cd'), 'name': '長城', 'city': '北京', 'country': '中國', 'gps': {'lat': 106.384, 'lng': 39.031}}
{'_id': ObjectId('61bc3f6d9e58737faea3c5ce'), 'name': '白宮', 'city': '華盛頓', 'country': '美國', 'gps': {'lat': 116.652, 'lng': 40.121}}
{'_id': ObjectId('61bc3f6d9e58737faea3c5cf'), 'name': '倫敦之眼', 'city': '倫敦', 'country': '英國', 'gps': {'lat': 116.348, 'lng': 34.43}}
# 新增或獲取數據庫,如果數據庫(new_db)不存在,系統自動創建數據庫(new_db)
new_db_one=client.new_db_one
# 查詢數據庫列表
db_names=client.list_database_names()
print(db_names)
# 刪除現有數據庫
client.drop_database('new_db_one')
# 集合的增加操作,如果 collection_name 集合不存在則創建,存在則直接插入數據
client.new_db_one.collection_name.insert_one({'light': 'hs'})
# 集合的查詢操作,查詢對應數據庫的集合名列表
client.new_db_one.list_collection_names()
# 集合的刪除操作
client.new_db_one.collection_name.drop()
# 文檔的新增操作,向集合 collection_name 中新增一個文檔
client.new_db_one.collection_name.insert_one({'light': 'hs'})
for i in client.new_db_one.collection_name.find({}):
print(i)
# 文檔的新增操作,向集合 collection_name 中新增一個文檔
client.new_db_one.collection_name.replace_one({'light': 'hs'}, {'hs2': 'light2'})
for i in client.new_db_one.collection_name.find({}):
print(i)
# 文檔的新增操作,向集合 collection_name 中新增一個文檔
client.new_db_one.collection_name.find({'hs2': 'light2'})
for i in client.new_db_one.collection_name.find({}):
print(i)
# 文檔的刪除操作,匹配的第一條數據進行刪除
client.new_db_one.collection_name.delete_one({'hs2': 'light2'})
for i in client.new_db_one.collection_name.find({}):
print(i)
本文通過使用 python 對 MongoDB 的數據庫、集合、文檔的操作實踐,方便讀者快速上手,趕快動手實踐起來吧。
作為一個用著和領扣 LeetCode 同樣技術棧 —— Python 的程序員,對于平時一些小的想法和 Demo 自然是通過 Python 來解決,但是在學習和使用的過程中,對于數據的存儲一直難以統一,最初使用純文本文件存儲,發現對于格式化索引來說純文本存儲效率太低,之后又轉了 MySQL 存儲,但是發現過于復雜,對于一些熱更新數據來說寫起來十分不雅觀,限制太多,無奈便換成了 JSON 格式存儲,當然,那是在現在使用的 MongoDB 之前了。
MongoDB 用起來其實比較隨意,相關命令遍寫的感覺和 Python 這類弱類型語言很相似,用起來比較 Geek。
MongoDB 是一個面向文檔的數據庫,目前由 10gen 開發并維護,它的功能豐富,齊全,完全可以替代 MySQL。 MonogDB 的一些亮點:
如果在本地測試或者僅僅是為了臨時丟一些數據進去的話,安裝并啟動 mongod 后直接在命令行下 mongo 即可完成連接,默認沒有連接密碼,如果看到類似如下提示的話,說明 MongoDB 已經安裝完成了:
下面讓 Python 連接上 MongoDB:
安裝 PyMongo:
pip3 install pymongo
在 Python 中引入:
import pymongo
指定數據表并連接:
myclient=pymongo.MongoClient("mongodb://localhost:27017/") # 默認的 MongoDB 監聽地址
db=myclient["leetcode"] # 使用上一步建立的 myclient 連接,并且使用 leetcode 數據庫
table=db['articles'] # 使用 db 連接的 leetcode 數據庫中的 articles 表
增刪改查:
# 定義我們要插入的數據,JSON 格式,在 Python 中就是 Dict 格式
post={"author": "Nova Kwok",
"text": "LeetCode is in China!",
"tags": ["mongodb", "python", "pymongo"],
"date": datetime.datetime.utcnow()}
插入一條記錄:
# 插入一條記錄并返回插入 ID
post_id=posts.insert_one(post).inserted_id
查詢記錄,這里我們需要多 import 一個包,pprint:
import pprint
pprint.pprint(posts.find_one())
返回結果:
{u'_id': ObjectId('...'),
u'author': u'Nova Kwok',
u'date': datetime.datetime(...),
u'tags': [u'mongodb', u'python', u'pymongo'],
u'text': u'LeetCode is now in China!'}