python操作MongoDB
- 2019 年 12 月 31 日
- 筆記
文章目錄
python操作MongoDB
前言
下面推薦本人寫的MongoDB的基本操作博文,介紹的還是比較詳細的,喜歡的朋友可以去看看
綜合應用
下面是自己寫的一個簡單的操作,分別對應了增刪改查,雖然不太全面,但是只是簡單的示範了一下,當然更多的功能還是需要自己去完善的,因為程式碼中都有注釋,這裡就不再詳細的說了
# coding:utf-8 import pymongo class MongoDB: def __init__(self,db,collections): """ 初始化資料庫 :param db:資料庫名稱 :param collections: 資料庫的集合的名稱 """ self.client = pymongo.MongoClient('localhost', 27017) #獲取的連接 self.db = self.client[db] #創建資料庫db self.post = self.db[collections] #創建或者選擇要操作的集合 def update(self, data,upsert): """ 更新資料庫中的數據,如果upsert為Ture,那麼當沒有找到指定的數據時就直接插入,反之不執行插入 :param data: 要插入的數據 :param upsert: 判斷是插入還是不插入 :return: """ self.post.update({"ip": data}, {'$set': {'ip': data}} , upsert) def find(self,select): """ 根據傳入的參數查找指定的值,注意這裡的select是字典 :param select: 指定的查找條件,這裡的是字典類型的,比如{"name":"chenjiabing","age":22} :return: 返回的是查詢的結果,同樣是字典類型的 """ return self.post.find(select) def insert(self,data): """ 向資料庫中插入指定的數據 :param data: 要插入的數據,這裡的是字典的類型比如:{"name":"chenjiabing","age":22} :return: 插入成功返回True,反之返回false """ try: self.post.insert(data) return True except: return False def remove(self,select): """ 刪除指定條件的記錄 :param select: 指定的條件,這裡是字典類型的,比如{"age":22} 表示刪除age=22的所有數據 :return: 如果刪除成功返回True,else返回False """ try: self.post.remove(select) return True except: return False
下面是利用上面的Mongo.py文件獲取西刺網站的代理並且存入資料庫
# coding:utf-8 import requests from bs4 import BeautifulSoup import time from Queue import Queue import threading from Mongo import MongoDB #導入文件 class XICI: def __init__(self, page): """ self.header:請求頭 self.q:存儲ip的隊列 slef.urls:頁面的url :param page:傳入的參數,表示獲取多少頁的ip """ self.header = {"User-Agent": 'Mozilla/5.0 (Windows NT 6.3; WOW64; rv:43.0) Gecko/20100101 Firefox/43.0'} self.q = Queue() self.urls = [] for i in range(1, page + 1): self.urls.append("http://www.xicidaili.com/nn/" + str(i)) self.mongo = MongoDB('python','ip') # 創建MogoDB對象 def get_ips(self, url): """ 根據一頁的請求爬取一個頁面的ip :param url:傳入的參數,表示每一頁的鏈接 :return: None """ try: res = requests.get(url, headers=self.header) if res.status_code == 200: soup = BeautifulSoup(res.text, 'lxml') ips = soup.find_all('tr') for i in range(1, len(ips)): ip = ips[i] tds = ip.find_all("td") ip_temp = "http://" + tds[1].contents[0] + ":" + tds[2].contents[0] print ip_temp self.q.put(ip_temp) # ip進入隊列 except: print "-------------------------------------------請求出現異常------------------------------------------------" def insert(self, url): """ 驗證出過來的ip,如果成功就直接存入資料庫 :param url: 驗證ip地址的url :return: 無返回值 """ while not self.q.empty(): ip = self.q.get() proxy = {"http": ip} print proxy try: res = requests.get(url, headers=self.header, proxies=proxy, timeout=5) if res.status_code == 200: self.mongo.update(ip,True) # 如果成功驗證直接進入資料庫 print "**************************成功存入資料庫********************************************" else: print "這個ip地址不能用" except: print "--------------------------請求失敗---------------------------------------------" def main(self): for url in self.urls: self.get_ips(url) threads = [] for i in range(5): t=threading.Thread(target=self.insert,args=["http://blog.csdn.net/qq_34162294/article/details/72353389"]) threads.append(t) for t in threads: t.start() if __name__ == '__main__': p = XICI(3) p.main()