python操作MongoDB

来源:互联网 发布:马士兵js视频教程 编辑:程序博客网 时间:2024/06/05 09:54

python操作MongoDB

前言

下面推荐本人写的MongoDB的基本操作博文,介绍的还是比较详细的,喜欢的朋友可以去看看

  • MongoDB干货篇之安装
  • MongoDB干货篇之查询数据
  • MongoDB干货篇之更新数据

综合应用

下面是自己写的一个简单的操作,分别对应了增删改查,虽然不太全面,但是只是简单的示范了一下,当然更多的功能还是需要自己去完善的,因为代码中都有注释,这里就不再详细的说了

# coding:utf-8import pymongoclass 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-8import requestsfrom bs4 import BeautifulSoupimport timefrom Queue import Queueimport threadingfrom 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()