10.网络爬虫—MongoDB详讲与实战
网络爬虫—MongoDB详讲与实战
- MongoDB
- MongoDB安装
- 创建数据目录
- 1.数据库操作
- 2.集合操作
- 3.文档操作
- 4.索引操作
- 5.聚合操作
- 6.备份与恢复
- MongoDB增删改查
- mongodb集合的增删改查
- 数据插入到表
- 数据的查看
- 删除数据
- 更新数据
- PyMongo
- 连接数据库
- 第二步 选择需要使用的数据库和集合
- PyMongo增删改查
- 实战
- 某电影top250排名获取并写入MongoDB
- 数据获取
- 写入MongoDB
前言:
🏘️🏘️个人简介:以山河作礼。
🎖️🎖️:Python领域新星创作者,CSDN实力新星认证
📝📝第一篇文章《1.认识网络爬虫》获得全站热榜第一
,python领域热榜第一
。
🧾 🧾第四篇文章《4.网络爬虫—Post请求(实战演示)》全站热榜第八
。
🧾 🧾第八篇文章《8.网络爬虫—正则表达式RE实战》全站热榜第十二
。
🎁🎁《Python网络爬虫》专栏累计发表九篇文章,上榜三篇。欢迎免费订阅!欢迎大家一起学习,一起成长!!
💕💕悲索之人烈焰加身,堕落者不可饶恕。永恒燃烧的羽翼,带我脱离凡间的沉沦。
MongoDB
MongoDB
是一种开源的文档型数据库管理系统,采用分布式文件存储方式,可以存储非结构化的数据,如文档和键值对等。
它的特点是高性能
、高可扩展性
、高可用性
和易于使用
,可以支持复杂的查询
和数据分析
,同时还提供了数据复制
、故障转移
和自动分片
等功能,可以应用于多种场景,如Web应用、大数据、物联网等。
MongoDB使用BSON(Binary JSON)格式来存储数据,支持多种编程语言的驱动程序,如Java、Python、Ruby、PHP等。
MongoDB安装
MongoDB 提供了可用于 32 位和 64 位系统的预编译二进制包,你可以从MongoDB官网下载安装,MongoDB 预编译二进制包下载地址: MongoDB
- MongoDB for Windows 64-bit 适合 64 位的 Windows Server 2008 R2, Windows 7 , 及最新版本的 Window 系统。
- MongoDB for Windows 32-bit 适合 32 位的 Window 系统及最新的 Windows Vista。 32 位系统上 MongoDB 的数据库最大为 2GB。
- MongoDB for Windows 64-bit Legacy 适合 64 位的 Windows Vista, Windows
Server 2003, 及 Windows Server 2008 。
下载 .msi 文件,下载后双击该文件,按操作提示安装即可。
安装过程中,你可以通过点击 “Custom(自定义)” 按钮来设置你的安装目录。
创建数据目录
=MongoDB 将数据目录存储在 db 目录下。但是这个数据目录不会主动创建,我们在安装完成后需要创建它。请注意,数据目录应该放在根目录下 (如: C:\ 或者 D:\ 等 )。
比如我这里安装在了D盘,那就在D盘创建一个data文件夹,进入文件夹创建db文件夹。
命令行下运行 MongoDB 服务器
为了从命令提示符下运行 MongoDB 服务器,你必须从 MongoDB 目录的 bin 目录中执行 mongod.exe
文件。
D:\Mongodb\bin\mongod --dbpath D:\data\db
如果执行成功,会输出如下信息:
有27017
就代表成功!!!
连接mongodb
有就说明成功了
1.数据库操作
- 创建数据库:
use datadb
-
查看当前数据库:
db
-
查看所有数据库:
show dbs
- 删除数据库:
db.dropDatabase()
2.集合操作
-
创建集合:
db.createCollection("<collection_name>")
-
-
查看集合
show collections
-
-
删除集合:
db.<collection_name>.drop()
3.文档操作
- 插入文档:
db.<collection_name>.insert(<document>)
- 将一个文档插入到指定的集合(collection)中。
- 查询文档:
db.<collection_name>.find(<query>, <projection>)
- 使用db.<collection_name>.find()方法查询符合条件的文档。其中,query参数指定查询条件,projection参数指定返回的文档中包含哪些字段。
- 更新文档:
db.<collection_name>.update(<query>, <update>, <options>)
- 使用db.<collection_name>.update()方法更新符合条件的文档。其中,query参数指定查询条件,update参数指定更新的内容,options参数指定更新选项,如是否只更新第一个匹配的文档。
- 删除文档:
db.<collection_name>.remove(<query>, <justOne>)
- 使用db.<collection_name>.remove()方法删除符合条件的文档。其中,query参数指定查询条件,justOne参数指定是否只删除第一个匹配的文档。
4.索引操作
- 创建索引:
db.<collection_name>.createIndex(<keys>, <options>)
- 使用db.<collection_name>.createIndex()方法创建索引。其中,keys参数指定需要创建索引的字段,options参数指定索引的一些选项,如索引类型、索引名称等。
- 查看索引:
db.<collection_name>.getIndexes()
- 使用db.<collection_name>.getIndexes()方法可以查看指定集合中的所有索引。
- 删除索引:
db.<collection_name>.dropIndex(<index>)
- 用db.<collection_name>.dropIndex()方法删除指定集合中的索引。其中,index参数指定需要删除的索引的名称。注意,删除索引可能会影响查询性能,应该谨慎使用。
5.聚合操作
- 聚合文档:
db.<collection_name>.aggregate(<pipeline>)
使用db.<collection_name>.aggregate()方法对指定集合中的文档进行聚合操作。其中,pipeline参数是一个数组,包含了一系列聚合操作的步骤。每个步骤都是一个文档,包含了一个操作符和对应的参数。
聚合操作的步骤可以包括以下几种:
$match:筛选符合条件的文档;
$group:按照指定的字段进行分组,可以对每个组进行计算;
$sort:对文档进行排序;
$limit:限制返回的文档数量;
$project:指定返回的文档中包含哪些字段,可以对字段进行修改或计算;
$unwind:将数组类型的字段展开成多个文档。
聚合操作可以根据实际需求进行组合,以实现复杂的数据处理任务。
6.备份与恢复
- 备份数据库:
mongodump -d <database_name> -o <backup_folder>
- 使用mongodump命令可以备份指定数据库。其中,-d参数指定要备份的数据库名称,-o参数指定备份文件存放的目录。
- 恢复数据库:
mongorestore -d <database_name> <backup_folder>
- 使用mongorestore命令可以恢复备份的数据库。其中,-d参数指定要恢复到的数据库名称,后面跟着备份文件所在的目录即可。
- 备份和恢复操作需要谨慎处理,因为错误的操作可能会导致数据丢失或不完整。因此,在进行备份和恢复操作之前,应该先进行数据备份和测试,确保数据的安全性和可靠性。
MongoDB增删改查
mongodb集合的增删改查
数据插入到表
插入演示
db.<col_name>.insert(dict_data)
插入实例
db.book.insert({'name':'小明','age':20,'gender':'男'})
其中,‘name’、'age’和’gender’是文档的字段名,‘小明’、20和’男’是对应的字段值。通过这个操作,我们成功向book集合中插入了一条文档。
数据的查看
输出演示
db.<col_name>.find({key1:value1, key2:value2}).pretty()
普通输出,获取所有数据
db.book.find()
美化输出
db.book.find().pretty()
删除数据
删除数据
db.<col_name>.remove({key1:value1})
删除实例
db.book.remove({'name':'小明'})
更新数据
只对一条满足要求的数据进行操作
db.col.update({'title':'MongoDB data''},{$set:{'title':'MongoDB'}})
db.book.update({'name':'小明'},{$set:{'age':18}})
对所有满足要求的数据进行操作
db.col.update({'title':'MongoDB data''},{$set:{'title':'MongoDB'}},{multi:true})
db.book.update({'name':'小明'},{$set:{'age':22}},{multi:true})
PyMongo
在终端输入代码安装:
pip install pymongo
连接数据库
mongo = pymongo.MongoClient() # 'localhost', 27017
mongo = pymongo.MongoClient() 这行代码中,mongo是一个MongoDB客户端对象,可以用来连接MongoDB数据库,执行数据库操作等。如果MongoDB服务运行在其他主机上,可以通过传递参数来指定主机名和端口号,如:
mongo = pymongo.MongoClient('mongodb://<hostname>:<port>')
其中,为MongoDB服务所在主机的IP地址或者主机名,为MongoDB服务所监听的端口号。
第二步 选择需要使用的数据库和集合
选择数据库
# 选择数据库
db = mongo.test
# print(db)
使用 mongo 连接MongoDB数据库中的 test 数据库,返回一个 test 数据库对象,用于执行数据库操作。如果 test
数据库不存在,则会在MongoDB中创建一个名为 test 的数据库。
选择集合
col = db.book # 选择集合
# print(col)
在 test 数据库中选择了一个名为 book 的集合,返回一个 book 集合对象,用于执行集合操作。如果 book 集合不存在,则会在
test 数据库中创建一个名为 book 的集合。
PyMongo增删改查
查找数据
print(list(col.find()))
print(list(col.find_one())) # 返回数据的key
增加一条数据
data_dict = {'name': '小雨', 'age': 20, 'gender': '男'}
col.insert_one(data_dict)
增加多条数据
data_dict = [{'name': '小雨', 'age': 20, 'gender': '男'},{'name': '小芳', 'age': 19, 'gender': '女'}]
col.insert_many(data_dict)
删除一条数据 只对一条数据生效
col.delete_one({'name': '小明'})
删除所有满足要求的数据 对所有数据生效
col.delete_many({'name': '小明'})
更新数据 只对一条数据生效
col.update_one({'name': '小雨'}, {'$set': {'age': 22}})
更新数据 对所有数据生效
col.update_many({'name': '小雨'}, {'$set': {'age': 22}})
实战
某电影top250排名获取并写入MongoDB
分两部分,第一部分,获取数据,第二部分,将数据写入MongoDB
数据获取
前面我们讲解了很多获取数据的方法,我们今天就不在这里作过多的展示,博主这里使用的是xpath进行解析数据,如果有什么疑问可以阅读博主之前的文章帮助理解和学习。《5.网络爬虫——Xpath解析》
直接查看结果:
我们本次目的是获取电影top250的电影名字,评分,评价人数和简介。数据较多,仅展示部分!!
写入MongoDB
- 连接数据库:
mongo = pymongo.MongoClient() # 连接数据库
print(mongo)
连接成功!
- 选择数据库
我们先来查看一下有那些数据库
开始写代码,选择我们的数据库:
db = mongo.datadb
print(db)
- 选择集合
col = db.book
print(col)
4.插入数据
把刚才获取的数据插入到mongodb中。
data_dict = {'name': name, 'score': score, 'number': number, 'introdu': introdu}# 插入数据col.insert_one(data_dict)time.sleep(1) # 睡眠1秒,防止过快请求被封IP
print('数据写入完成')
5.查看数据
results = col.find()
for result in results:print(result)
仅展示部分数据,数据太长了。正确来说一个有250条数据在里面。
写在最后:
👉 👉本专栏所有文章是博主学习笔记,仅供学习使用,爬虫只是一种技术,希望学习过的人能正确使用它。博主也会定时一周三更爬虫相关技术更大家系统学习,如有问题,可以私信我,没有回,那我可能在上课或者睡觉,写作不易,感谢大家的支持!!🌹🌹🌹
相关文章:

10.网络爬虫—MongoDB详讲与实战
网络爬虫—MongoDB详讲与实战MongoDBMongoDB安装创建数据目录1.数据库操作2.集合操作3.文档操作4.索引操作5.聚合操作6.备份与恢复MongoDB增删改查mongodb集合的增删改查数据插入到表数据的查看删除数据更新数据PyMongo连接数据库第二步 选择需要使用的数据库和集合PyMongo增删…...

C4D -> Three.js资产制作与导入流程
这篇文章介绍从 Cinema 4D 中的 UV 模型到用于 Three.js 的 .glb/.gltf 资产和纹理的整个过程,该网格将依赖 MeshStandardMaterial 来复制你在 Redshift 中看到的内容, 没有由 Three.js 处理的任何照明。 推荐:用 NSDT场景设计器 快速搭建3D场…...

【博学谷学习记录】大数据课程-学习十三周总结
Hive的交互方式 第一种交互方式:bin/hive hive 创建一个数据库 create database mytest; show databases; 第二种交互方式:使用sql语句或者sql脚本进行交互 不进入hive的客户端直接执行hive的hql语句 hive -e “create database mytest2” 或者我们…...

Spring Cloud快速入门
文章目录Spring Cloud快速入门一、基础概念1、微服务架构2、微服务技术栈3、什么是Spring Cloud?4、Spring Cloud和Spring Boot的联系?5、比较成熟的互联网架构二、Rest环境搭建1、搭建提供者1.1、创建一个父工程1.2、创建一个springcloud-api模块1.3、创建一个spr…...

论文学习——VideoGPT
论文学习——VideoGPT: Video Generation using VQ-VAE and Transformers 原文链接:https://arxiv.org/abs/2104.10157 1. 设计思路 不同种类的生成模型在一下多个维度各有权衡:采样速度、样本多样性、样本质量、优化稳定性、计算需求、评估难易程度等…...

Flutter系列(五)底部导航详解
Flutter系列(四)底部导航顶部导航图文列表完整代码,如下: Flutter系列(四)底部导航顶部导航图文列表完整代码_摸金青年v的博客-CSDN博客 目录 一、前言 二、Scaffold组件 三、BottomNavigationBar组件 …...

『pyqt5 从0基础开始项目实战』02. 页面布局设计(保姆级图文)
目录弹性布局介绍导包和框架代码布局框架搭建1. 总体布局框架2. 顶部菜单布局3. form添加内容布局4. table数据展示布局5. footer底部菜单完整项目代码总结欢迎关注 『pyqt5 从0基础开始项目实战』 专栏,持续更新中 欢迎关注 『pyqt5 从0基础开始项目实战』 专栏&am…...

【Python机器学习】——平均中位数模式
Python机器学习——平均中位数模式 文章目录 Python机器学习——平均中位数模式一、Python 平均中位数模式一、Python 平均中位数模式 均值、中值和众数 从一组数字中我们可以学到什么? 在机器学习(和数学)中,通常存在三中我们感兴趣的值: 均值(Mean) - 平均值 中值(M…...

Windows窗口
Windows窗口 Unit01注册窗口类 01窗口类的概念 窗口类是包括了窗口的各种参数信息的数据结构每个窗口都具有窗口类,基于窗口类创建窗口每个窗口都具有一个名称,使用前必须注册到系统 02窗口类的分类 系统窗口类 系统已经定义好的窗口类,…...

Spring Transaction 源码解读
Spring Transaction 规范的maven坐标如下: <dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>...</version></dependency>该包提供了spring事务规范和默认的jta(ja…...

[Netty] Channel和ChannelFuture和ChannelFutureListener (六)
文章目录1.Channel介绍2.ChannelFuture接口介绍3.GenericFutureListener接口介绍1.Channel介绍 NIO的Channel与Netty的Channel 不一样 Netty重新设计了Channel接口,并且给予了很多不同的实现, Channel是Netty网络的抽象类, 除了NIO中Channel所包含的网络I/O操作, 主动建立和关…...

条件渲染
组件经常需要根据不同条件显示不同内容。在React中,你可以使用类似于if语句、&&和?:运算符的JavaScript语法有条件地呈现JSX。你将学到:如何根据条件返回不同的JSX如何有条件地包含或排除一段JSX在React代码库中常见的条件语法快捷方式有条件地…...

springboot(10)异步任务
文章目录1、SpringBoot异步任务1.1使用注解EnableAsync开启异步任务支持1.2使用Async注解标记要进行异步执行的方法1.3controller测试2.异步任务相关限制3.1自定义 Executor3.1.1应用层级:3.1.2方法层级:3.2自定义 Executor (第二种方式)4.1异常处理4.1.…...

清华大学开源的chatGLM-6B部署实战
Windows部署 win10 通过wsl部署 常见问题: torch.cuda.OutOfMemoryError: CUDA out of memory. 在Windows的系统环境变量中增加 变量名:PYTORCH_CUDA_ALLOC_CONF 变量值:max_split_size_mb:32 文档书写时使用3090 24G显存配置,其他规格酌情调整 32 至其他值,如未设置变…...

通过矩阵从整体角度搞懂快速傅里叶变换原理
离散傅里叶变换公式 公式 f[k]∑n0N−1g[n]e−i(2π/N)kn,其中(0<n<N)f[k]\sum_{n0}^{N-1}g[n]e^{-i(2\pi/N)kn}, 其中(0<n<N) f[k]n0∑N−1g[n]e−i(2π/N)kn,其中(0<n<N) 逆变换公式 g[n]1N∑k0N−1f[k]ei(2π/N)kn,其中(0<k<N)g[n]\frac{1}{N}\…...

【C++从0到1】25、C++中嵌套使用循环
C从0到1全系列教程 1、实例代码 #include <iostream> // 包含头文件。 using namespace std; // 指定缺省的命名空间。int main() {// 超女分4个小组,每个小组有3名超女,在控制台显示每个超女的小组编号和组内编号。// 用一个循环…...

FastDFS与Nginx结合搭建文件服务器,并内网穿透实现公网访问
文章目录前言1. 本地搭建FastDFS文件系统1.1 环境安装1.2 安装libfastcommon1.3 安装FastDFS1.4 配置Tracker1.5 配置Storage1.6 测试上传下载1.7 与Nginx整合1.8 安装Nginx1.9 配置Nginx2. 局域网测试访问FastDFS3. 安装cpolar内网穿透4. 配置公网访问地址5. 固定公网地址5.1 …...

密集场景下的行人跟踪替代算法,头部跟踪算法 | CVPR 2021
一个不知名大学生,江湖人称菜狗 original author: Jacky LiEmail : 3435673055qq.com Time of completion:2023.4.8 Last edited: 2023.4.8 目录 摘要 主要内容 结果 这篇文章是CVPR 2021 的最新论文,文章的标题: 文章的主要内…...

Matlab与ROS(1/2)---服务端和客户端数据通信(五)
0. 简介 在前几讲我们讲了Matlab中的Message以及Topic的相关知识。而ROS主要支持的通信机制还有服务这一类。服务通过允许请求以及响应的通信方式,来给整个系统完成更紧密的耦合。服务客户端向服务服务器发送请求消息并等待响应。服务器将使用请求中的数据构造响应…...

数字化转型的避坑指南:细说数字化转型十二大坑
随着信息技术的快速发展,数字化转型已经成为许多企业发展的必经之路。然而,数字化转型过程中也存在许多坑,如果不谨慎处理,就可能导致企业陷入困境。本文将细说数字化转型的十二大坑,并提供相应的避坑指南。 1、不了解…...

pt05Encapsulationinherit
Encapsulation &inherit 封装继承 封装 向类外提供必要的功能,隐藏实现的细节, 代码可读性更高优势:简化编程,使用者不必了解具体的实现细节,只需要调用对外提供的功能。私有成员:作用:无需向类外提供…...

面向对象编程(基础)9:封装性(encapsulation)
目录 9.1 为什么需要封装? 而“高内聚,低耦合”的体现之一: 9.2 何为封装性? 9.3 Java如何实现数据封装 9.4 封装性的体现 9.4.1 成员变量/属性私有化 实现步骤: 成员变量封装的好处: 9.4.2 私有化…...

fate-serving-server增加取数逻辑并源码编译
1.什么是fate-serving-server? FATE-Serving 是一个高性能、工业化的联邦学习模型服务系统,专为生产环境而设计,主要用于在线推理。 2.fate-serving-server源码编译 下载fate-serving-serving项目(GitHub - FederatedAI/FATE-Serving: A scalable, h…...

循环队列、双端队列 C和C++
队列 目录 概念 实现方式 顺序队列 循环队列 队列的数组实现 用循环链表实现队列 STL 之 queue 实现队列 STL 之 dequeue 实现双端队列 概念 队列是一种特殊的线性表,它只允许在表的前端(称为队头,front)进行删除操作…...

正则表达式(语法+例子)
文章目录一、介绍二、语法1、匹配字符2、表示数量的字符3、边界字符4、其他字符5、转义字符三、例子1、邮箱2、用逗号分隔的数字集合1,23、允许一位小数4、20yy-mm-dd日期格式5、手机号6、匹配html、xml标签一、介绍 正则表达式(Regular Expression)&am…...

Properties和IO流集合的方法
方法名说明void load(InputStream inStream)从输入字节流读取属性列表(键和元素)void load(Reader reader)从输入字符流读取属性列表(键和元素对)void store(OutputStream out,String comments)将此属性列表(键和元素对…...

python 生成器、迭代器、动态新增属性及方法
目录 一、生成器 1、生成器定义 2、生成器存在的意义 3、创建生成器方式一(生成器表达式) 4. 创建生成器方式二(生成器函数) 1. 生成器函数 2. 生成器函数的工作原理 5. 总结 1. 什么是生成器 2. 生成器特点 二、迭代器…...

Java处理JSON
Java处理json有很多种方法,在这里总结一下。 1 Jackson Spring MVC 默认采用Jackson解析Json,出于最小依赖的考虑,也许Json解析第一选择就应该是Jackson。 1.1 引入的包 Jackson核心模块由三部分组成:jackson-core、jackson-a…...

58-Map和Set练习-LeetCode692前k个高频单词
题目 给定一个单词列表 words 和一个整数 k ,返回前 k 个出现次数最多的单词。 返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率, 按字典顺序 排序。 示例 1: 输入: words ["i", "love", …...

线程生命周期及五种状态
文章目录一、线程生命周期及五种状态1、New(初始化状态)2、Runnable(就绪状态)3、Running(运行状态)4、Blocked(阻塞状态)5、Terminated(终止状态)二、线程基本方法1、线程等待(wait)2、线程睡眠(sleep)3、…...