准备
我的本机环境是:
Python3.6
mongodb3.4.3
IDE: PyCharm Professional
因为要使用Python来操作数据库,所以还需要安装一个pymongo的包。需要注意的是直接用
pipinstallpymongo
是没办法使用的,可能是版本的问题,也可能是兼容性的问题。所以我们需要这么做。
到 www.lfd.uci.edu/~gohlke/pyt…
下找到合适自己Python版本的whl文件,然后再使用pip安装这个whl文件即可。
如果您的控制台也输出了如下类似的信息,那说明您已经连接成功了。
Collection(Database(MongoClient(host=['localhost:27017'], document_class=dict, tz_aware=False, connect=True), 'test'), 'user')
增:insert
mongodb的插入操作也是很方便的。我这里事先在MongoVUE中添加了几条数据。
代码运行的结果如下:
D:\Software\Python3\python.exe E:/Code/Python/Python3/MyWork/mongo/mongo-connect.py{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':28, 'Address': '北京海淀', 'blog': 'http://blog.csdn.net/zhangsan'}{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}{'_id': ObjectId('58fae2dd95ee7810044c07cf'), 'name': '刀塔传奇', 'age':23, 'address': '北京朝阳', 'blog': '没有博客'}
对比初始状态,不难发现多了一条新插入的记录。
插入多条记录
也许你会有这样的需求,要一次插入多条记录。这在命令行中很方便,我们写个循环就可以了。不过pymongo也给我们提供了这样的一个接口。
运行的结果如下:
D:\Software\Python3\python.exe E:/Code/Python/Python3/MyWork/mongo/mongo-connect.py{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':28, 'Address': '北京海淀', 'blog': 'http://blog.csdn.net/zhangsan'}{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}{'_id': ObjectId('58fae2dd95ee7810044c07cf'), 'name': '刀塔传奇', 'age':23, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc07'), 'name': '刀塔传奇', 'age':1, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc08'), 'name': '刀塔传奇', 'age':4, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc09'), 'name': '刀塔传奇', 'age':9, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0a'), 'name': '刀塔传奇', 'age':16, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}
怎么样,还是很方便的吧。
{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':28, 'Address': '北京海淀', 'blog': 'http://blog.csdn.net/zhangsan'}{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}{'_id': ObjectId('58fae2dd95ee7810044c07cf'), 'name': '刀塔传奇', 'age':23, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc07'), 'name': '刀塔传奇', 'age':1, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc08'), 'name': '刀塔传奇', 'age':4, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc09'), 'name': '刀塔传奇', 'age':9, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0a'), 'name': '刀塔传奇', 'age':16, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}修改操作之后:{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':23, 'address': '上海新城区', 'blog': '张飞的博客内容被修改后了的内容'}{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}{'_id': ObjectId('58fae2dd95ee7810044c07cf'), 'name': '刀塔传奇', 'age':23, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc07'), 'name': '刀塔传奇', 'age':1, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc08'), 'name': '刀塔传奇', 'age':4, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc09'), 'name': '刀塔传奇', 'age':9, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0a'), 'name': '刀塔传奇', 'age':16, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}
方式二
下面介绍部分修改字段内容的方式。
默认会删除所有符合条件的记录。
如下:
{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':23, 'address': '上海新城区', 'blog': '张飞的博客内容被修改后了的内容'}{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}{'_id': ObjectId('58fae2dd95ee7810044c07cf'), 'name': '可爱的Mongodb', 'age':23, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc07'), 'name': '可爱的Mongodb', 'age':1, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc08'), 'name': '可爱的Mongodb', 'age':4, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc09'), 'name': '刀塔传奇', 'age':9, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0a'), 'name': '刀塔传奇', 'age':16, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}修改操作之后:{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':23, 'address': '上海新城区', 'blog': '张飞的博客内容被修改后了的内容'}{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}{'_id': ObjectId('58fae37b95ee78202cc2cc09'), 'name': '刀塔传奇', 'age':9, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0a'), 'name': '刀塔传奇', 'age':16, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}
查: find
对于一个数据库来说,最最常用的估计就是查找操作了。查找操作的速度决定了数据库性能的评价。下面对于几个常用的查询做下介绍。
{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':23, 'address': '上海新城区', 'blog': '张飞的博客内容被修改后了的内容'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}
查询限制条数
collection.find({"age": {'$gt':20}}).limit(number)
查询某(几)个字段的值
运行结果:
user集合中共有11条数据
对查询结果排序输出
items= collection.find().sort([('age', pymongo.ASCENDING), ('Address', pymongo.DESCENDING)])foriteminitems: print(item)
运行结果:
{'_id': ObjectId('58fae37b95ee78202cc2cc09'), 'name': '刀塔传奇', 'age':9, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0a'), 'name': '刀塔传奇', 'age':16, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':23, 'address': '上海新城区', 'blog': '张飞的博客内容被修改后了的内容'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}
模糊查询
in 查询
#in查询items = collection.find({'age': {'$in': [18,19,22,28]}})foriteminitems:print(item)
运行结果:
{'_id': ObjectId('58f9e98f95ee7820082b562d'), 'name': '李四', 'age':19, 'Address': '上海滩', 'blog': 'http://blog.csdn.net/lisi'}{'_id': ObjectId('58fac6c495ee78170c9075c7'), 'name': '可爱的哒哒', 'age':19, 'address': '北京朝阳', 'blog': '哒哒的博客一般人是不会知道的'}
not in 查询
#notin查询items = collection.find({'age': {'$nin': [18,19,28]}})foriteminitems:print(item)
运行结果:
{'_id': ObjectId('58f9e91295ee7820082b562b'), 'name': '郭 璞', 'age':20}{'_id': ObjectId('58f9e96f95ee7820082b562c'), 'name': '张三', 'age':23, 'address': '上海新城区', 'blog': '张飞的博客内容被修改后了的内容'}{'_id': ObjectId('58f9e9a895ee7820082b562e'), 'name': '王五', 'age':23, 'Address': '江苏杭州', 'blog': 'http://blog.csdn.net/wangwu'}{'_id': ObjectId('58f9e9c595ee7820082b562f'), 'name': '赵六', 'age':32, 'Address': '江苏南京', 'blog': 'http://blog.csdn.net/zhaoliu'}{'_id': ObjectId('58fae37b95ee78202cc2cc09'), 'name': '刀塔传奇', 'age':9, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0a'), 'name': '刀塔传奇', 'age':16, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0b'), 'name': '刀塔传奇', 'age':25, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0c'), 'name': '刀塔传奇', 'age':36, 'address': '北京朝阳', 'blog': '没有博客'}{'_id': ObjectId('58fae37b95ee78202cc2cc0d'), 'name': '刀塔传奇', 'age':49, 'address': '北京朝阳', 'blog': '没有博客'}
差不多经常用到的简单的查询操作就是这样了。掌握了这些差不多也算可以了。
实战
下面做个实战,来加深一下熟练度。比如我要爬取西祠代理网的代理IP的信息。那么我可以这么来。
爬取模块
# coding: utf8# @Author: 郭 璞# @File: spider.py # @Time: 2017/4/22 # @Contact: 1064319632@qq.com# @blog: http://blog.csdn.net/marksinoberg# @Description: 爬取代理IP模块import requestsfrom bs4 import BeautifulSoupdef gethtml(url, headers):"""
获取网页源代码
:param url:
:param headers:
:return:
"""returnrequests.get(url=url, headers=headers).textdef parse(data):"""
解析网页源码,将获取到的代理IP数据封装到一个大的集合中。
:param data:
:return:
"""result = [] soup = BeautifulSoup(data,'html.parser') iptable = soup.find('table', {'id':'ip_list'}).find_all('tr')[2:]foriteminiptable:try: ipaddress = item.find_all('td')[1].get_text() port = item.find_all('td')[2].get_text() address = item.find_all('td')[3].get_text() ip = {'ipaddress': ipaddress,'port': port,'address': address } result.append(ip) ip =NoneexceptExceptionase: print(e)continuereturnresultif __name__ =='__main__': headers = {'Referer':'http://www.xicidaili.com/','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36'} url ='http://www.xicidaili.com'result = parse(gethtml(url=url, headers=headers)) print("IP: {}\t Port: {}\t Location: {}".format(result[0].ipaddress, result[0].port, result[0].address))
存储模块
# coding: utf8#@Author: 郭 璞#@File: storage.py #@Time: 2017/4/22 #@Contact: 1064319632@qq.com#@blog: http://blog.csdn.net/marksinoberg#@Description: 代理IP存储模块import pymongoclass DbUtils(object):def__init__(self, dbname='test', collectionname=''):# 实例化self.dbexec("self.db = pymongo.MongoClient()."+dbname)# 给要操作的集合赋值exec("self.collection = self.db."+collectionname)defstorage(self, data=[]):returnTrueifself.collection.insert_many(data)elseFalsedefupdate(self, old={}, new={}):returnTrueifself.collection.update(old, {'$set': new})elseFalsedefselect(self, where={}, field=[], limits=3, ordering=[]):returnself.collection.find(where, field).limit(limits).sort(ordering)defdelete(self, field={}):returnTrueifself.collection.remove(field)elseFalseif __name__=='__main__': dbutils = DbUtils('test','iptable') data = [ {'ipaddress':'127.0.0.1','port':8080,'address':'辽宁大连'}, {'ipaddress':'localhost','port':'27017','address':'北京朝阳'} ]# flag = dbutils.storage(data=data)# old = {'address': '辽宁大连'}# new = {'address': '浙江温州'}# flag = dbutils.update(old=old, new=new)# field = {'port': 8080}# flag = dbutils.delete(field=field)# print("OP Result:", flag)result = dbutils.select({'ipaddress':'localhost'}, ['ipaddress','address'],3, [('port', pymongo.ASCENDING)])foriteminresult:print(item)
总管模块
#coding: utf8# @Author: 郭 璞# @File: Main.py# @Time:2017/4/22# @Contact:1064319632@qq.com# @blog:http://blog.csdn.net/marksinoberg# @Description: 代理IP模块整合frommongoimportspiderfrom mongoimportstorageif __name__ =='__main__': headers = {'Referer':'http://www.xicidaili.com/','User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.110 Safari/537.36'} url ='http://www.xicidaili.com'# 获取代理IP列表 iptable = spider.parse(spider.gethtml(url=url, headers=headers))print(iptable) # 存储数据 dbutils = storage.DbUtils('test','iptable') flag = dbutils.storage(data=iptable)ifflag:print('代理IP已经装填完毕,整装待发!')else:print('代理IP装填不成功,可能出现了点问题!')
运行效果
[{'ipaddress':'119.5.0.3','port':'808','address':'四川南充'},。。。。。。。。。。。{'ipaddress':'202.119.199.147','port':'1080','address':'江苏徐州'}]代理IP已经装填完毕,整装待发!
数据库中的效果如下:
总结
最后来回顾一下今天的内容。
使用Python简单操作了下mongodb。
对常用的操作进行了演示和讲解
实战:封装了爬虫,封装了数据库工具类。分层分模块思想的应用。
大概就是这些了。现在先拿代理IP练练手,后面还可以慢慢添加功能,爬取到合适的某些数据之后,通过发邮件,或者调用即时通信api来及时的通知自己。这都是有待添加的内容。
欢迎关注我的博客或者公众号:https://home.cnblogs.com/u/Python1234/ Python学习交流
欢迎加入我的千人交流学习答疑群:125240963
网友评论