前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python操作MongoDB

python操作MongoDB

作者头像
爱撒谎的男孩
发布2019-12-31 12:25:27
4860
发布2019-12-31 12:25:27
举报
文章被收录于专栏:码猿技术专栏

文章目录

  1. 1. python操作MongoDB
    1. 1.1. 前言
    2. 1.2. 综合应用

python操作MongoDB

前言

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

综合应用

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

代码语言:javascript
复制
# 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文件获取西刺网站的代理并且存入数据库

代码语言:javascript
复制
# 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()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • python操作MongoDB
    • 前言
      • 综合应用
      相关产品与服务
      数据库
      云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档