python操作MongoDB

  • 2019 年 12 月 31 日
  • 筆記

文章目錄

  1. 1. python操作MongoDB
    1. 1.1. 前言
    2. 1.2. 綜合應用

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()