Python爬蟲資料儲存到MongoDB中

2022-08-13 20:27:17 字數 3426 閱讀 5458

mongodb是一款由c++語言編寫的非關係型資料庫,是乙個基於分布式檔案儲存的開源資料庫系統,其內容儲存方式類似於json物件,它的字段值可以是其它文件或陣列,但其資料型別只能是string文字型。

在使用之前我們要確保已經安裝好了mongodb並啟動了該服務。此處主要用於python資料的儲存,我們要安裝python的pymongo庫,執行 『pip install pymongo』 命令完成pymongo的安裝。進入python工作模式,可以通過pymongo.version 檢視pymongo的版本資訊。

第一步,連線mongodb

我們通過pymongo庫里的mongoclient。其中第乙個引數 host 是mongodb的位址,第二個引數是埠 port (不傳引數的話預設是27017) 

client = pymongo.mongoclient(host='

127.0.0.1

',port=27017)

另一種方法是直接傳遞mongodb的連線字串,以 mongodb 開頭。

client = pymongo.mongoclient('

mongodb:

')

第二步,選擇資料庫或集合

在mongodb中可以建立多個資料庫,其中每個資料庫又包含許多集合,類似於關聯式資料庫中的表。選擇資料庫有兩種方法,這兩種方法作用相同。

db = client.test    # test資料庫

db = client['

test

']

選擇好資料庫後我們需要指定要操作的集合,與資料庫的選擇類似。

p = db.persons    # persons集合

p = db['

persons

']

第三步,新增資料

person =

result =p.insert(person)

# 在pymongo 3.x版本後,官方推薦使用insert_one(),該方法返回的不再是單純的_id值,我們需要執行result.inserted_id檢視 _id 值

print(result)

此處通過物件的 insert() 方法新增了一條資料,新增成功後返回的是資料插入過程中自動新增的 _id 屬性值,這個值是唯一的。另外我們還可以新增多條資料,它以列表的形式進行傳遞。

person =

person1 =

result =p.insert([person,person1])

# 推薦使用 insert_many() 方法,之後使用 result.inserted_ids 檢視插入資料的 _id 列表

print(result)

第四步,查詢資料

查詢資料我們可以使用 find_one() 或 find() 方法,其中 find_one() 得到的是單個資料結果,find() 返回的是乙個生成器物件。

res = p.find_one()  # 查詢 name 為 abc 的人的資訊,返回字典型的資料

print(res)

find() 則用來查詢多條資料,返回 cursor 型別的生存器,我們要遍歷取得所有的資料結果。

res = p.find()  # 查詢集合中age是20的資料

# res = p.find(}) # 查詢集合中age大於20的資料

另外,我們還可以通過正則匹配進行查詢。

res = p.find(})  # 查詢集合中name以a開頭的資料

要統計查詢的結果一共有多少條資料,需要使用 count() 方法

count = p.find().count()  # 統計集合中所有資料條數
排序則直接呼叫 sort() 方法,根據需求傳入公升序降序標誌即可

res = p.find().sort('

age',pymongo.ascending) # 將集合中的資料根據age進行排序,pymongo.ascending表示公升序,pymongo.descending表示降序

當我們只需要取得幾個元素時,我們可以使用 skip() 方法偏移幾個位置,得到去掉偏移個數之後剩下的元素資料

res = p.find(}).skip(2) 

print([ r['

name

'] for r in res ]) # 列印name以a開頭的資料的名稱name,從第三個顯示

第五步,更新資料

更新資料我們使用 update() 方法實現,並指定更新的條件和需要更新的資料即可。

where = 

res =p.find_one(where)

res[

'age

'] = 25result =p.update(where, res) # 推薦使用 update_one() 或 update_many()

print(result)

返回的是乙個字典形式的資料,,其中 ok 表示執行成功,nmodified 表示影響的資料條數。

另外我們還可以使用 $set 操作符對資料進行更新。使用$set則只更新字典內存在的字段,其它欄位則不更新,也不刪除。如果不用則會更新所有的資料,而其它存在的字段則會被刪除。

where = }

result = p.update_many(where,}) # 將集合中年齡大於20的第一條的資料年齡加1

print(result)

print(result.matched_count,result.modified_count) # 獲取匹配的資料條數,影響的資料條數

第六步,刪除資料

刪除資料可以呼叫 remove() 方法,需要指定刪除條件。

result = p.remove()   # 刪除名稱為abc的資料,推薦使用 delete_one() 和 delete_many(),執行後呼叫 result.delete_count,獲得刪除的資料條數
返回的是一條字典型資料,

另外,我們還可以對索引進行操作,比如 create_index() 建立單個索引,create_indexes()建立多個索引,drop_index()刪除索引等方法。

參考:靜覓部落格    

Python爬蟲 爬蟲獲取資料儲存到檔案

本篇文章 繼續介紹另外兩種方式來實現python爬蟲獲取資料,並將python獲取的資料儲存到檔案中。說明一下我的 環境是python3.7,本地環境是python2.x的可能需要改部分 用python3.x環境的沒問題。coding utf 8 import urllib.requestimpor...

Python爬蟲(二) 爬蟲獲取資料儲存到檔案

本篇文章 繼續介紹另外兩種方式來實現python爬蟲獲取資料,並將python獲取的資料儲存到檔案中。說明一下我的 環境是python3.7,本地環境是python2.x的可能需要改部分 用python3.x環境的沒問題。coding utf 8 import urllib.request impo...

python 爬蟲 xpath 儲存到資料庫

參考 安裝 lxml 庫 import pymysql import requests from lxml import etree def get movies page url page 獲取url中的內容 response requests.get url html content respo...