当前位置: 首页 > news >正文

MySQL数据库 编程入门

目录

MySQL数据库数据类型

MySQL数据库命令执行

创建用户

创建删除库

创建删除表


MySQL数据库数据类型

MySQL数据库定义了多种数据类型,下面是一些常见的MySQL数据类型及其对应的C/C++类型:

整数类型:

  • TINYINT:有符号范围-128到127,无符号范围0到255。对应的C/C++类型为signed char或unsigned char。
  • SMALLINT:有符号范围-32768到32767,无符号范围0到65535。对应的C/C++类型为short或unsigned short。
  • INT:有符号范围-2147483648到2147483647,无符号范围0到4294967295。对应的C/C++类型为int或unsigned int。
  • BIGINT:有符号范围-9223372036854775808到9223372036854775807,无符号范围0到18446744073709551615。对应的C/C++类型为long long或unsigned long long。

浮点数类型:

  • FLOAT:单精度浮点数。对应的C/C++类型为float。
  • DOUBLE:双精度浮点数。对应的C/C++类型为double。

字符串类型:

  • CHAR:固定长度字符串,最多255个字符。对应的C/C++类型为char数组。
  • VARCHAR:可变长度字符串,最多65535个字符。对应的C/C++类型为char数组或std::string。
  • TEXT:可变长度文本,最多65535个字符。对应的C/C++类型为char数组或std::string。

日期和时间类型:

  • DATE:日期,格式为YYYY-MM-DD。对应的C/C++类型为struct tm或std::string。
  • TIME:时间,格式为HH:MM:SS。对应的C/C++类型为struct tm或std::string。
  • DATETIME:日期和时间,格式为YYYY-MM-DD HH:MM:SS。对应的C/C++类型为struct tm或std::string。

其他类型:

  • BOOLEAN:布尔类型,值为TRUE或FALSE。对应的C/C++类型为bool。
  • BLOB:二进制大对象,最多65535字节。对应的C/C++类型为unsigned char数组。

MySQL数据库命令执行

执行命令的过程:

  1. 发送SQL命令
  2. 获取SQL执行结果
  3. 解析获取到的结果

发送SQL命令接口

int STDCALL mysql_real_query(MYSQL *mysql, const char *q, unsigned long length);

q是SQL指令;length是指令的长度;向MySQL服务器发送SQL指令

获取SQL执行结果接口

MYSQL_RES *STDCALL mysql_use_result(MYSQL *mysql);

释放结果接口

void STDCALL mysql_free_result(MYSQL_RES *result);

获取结果集列的数量

unsigned int STDCALL mysql_num_fields(MYSQL_RES *res);

获取结果集行的数量

my_ulonglong STDCALL mysql_num_rows(MYSQL_RES *res);

取结果中的行接口

MYSQL_ROW STDCALL mysql_fetch_row(MYSQL_RES *result);

获取每一行的长度接口

​​​​​​​unsigned long *STDCALL mysql_fetch_lengths(MYSQL_RES *result);

获取结果集中每一列的定义接口

MYSQL_FIELD *STDCALL mysql_fetch_fields(MYSQL_RES *res);

创建用户

CREATE USER '用户名'@'范围' IDENTIFIED BY '密码';

范围包括:ip、localhost、%

ip即只能从指定地址登录;localhost 即只能从本机登录;% 即可以从任何地址登录

光创建用户,并没有什么作用,还需要授权操作表

GRANT privileges ON databasename.tablename TO '用户名'@'范围'

privileges可以是:

SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,EXECUTE,INDEX,REFERENCES

ALTER ROUTINE,CREATE ROUTINE,CREATE TEMPORARY,SHOW VIEW,LOCK TABLES

ALL

databasename是库的名称,可以填入*表示所有

tablename是表的名称,可以填入*表示所有

有授权自然有撤销权限

REVOKE 权限 ON databasename.tablename FROM '用户名'@'范围'
#include <iostream>
#include <mysql.h>#pragma comment(lib,"libmysql.lib")int main()
{MYSQL* mysql = new MYSQL();//MYSQL mysql;//占用的是栈上的内存MYSQL* pDB = mysql_init(mysql);if (pDB == NULL) {std::cout << "mysql_init failed!" << std::endl;return -1;}pDB = mysql_real_connect(pDB, "localhost", "root", "123456", "mysql", 3306, NULL, 0);std::cout << pDB << std::endl;if (pDB) {std::string sql = "CREATE USER 'hello'@'localhost' IDENTIFIED BY '123456'";int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;}MYSQL_RES* result = mysql_use_result(mysql);if (result != NULL) {unsigned nFields = mysql_num_fields(result);my_ulonglong nRows = mysql_num_rows(result);MYSQL_FIELD* fields = mysql_fetch_fields(result);for (unsigned i = 0; i < nRows; i++) {MYSQL_ROW row = mysql_fetch_row(result);if (row != NULL) {for (unsigned j = 0; j < nFields; j++) {std::cout << "type:" << fields[j].type << " " << fields[j].name << ":" << row[j] << std::endl;}}std::cout << "===================================================" << std::endl;}mysql_free_result(result);}sql = "GRANT ALL ON *.* TO 'hello'@'localhost'";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}result = mysql_use_result(mysql);if (result != NULL) {unsigned nFields = mysql_num_fields(result);my_ulonglong nRows = mysql_num_rows(result);MYSQL_FIELD* fields = mysql_fetch_fields(result);for (unsigned i = 0; i < nRows; i++) {MYSQL_ROW row = mysql_fetch_row(result);if (row != NULL) {for (unsigned j = 0; j < nFields; j++) {std::cout << "type:" << fields[j].type << " " << fields[j].name << ":" << row[j] << std::endl;}}std::cout << "===================================================" << std::endl;}mysql_free_result(result);}mysql_close(pDB);}delete mysql;
}

创建删除库

MySQL如何创建数据仓库
CREATE DATABASE 数据仓库名;
数据库名称不要使用奇怪的或者特殊的符号,例如空格、路径符、引号

MySQL如何指派仓库权限给用户
GRANT 权限 ON databasename.tablename TO '用户名'@'范围'

删除库
DROP DATABASE 数据仓库名;

切换数据库
USE 数据仓库名;

用户、数据库、表等等,这些元素的创建,一般是不会有返回结果
仅仅有一个返回值,标明执行的结果是成功还是失败!

测试代码

#include <iostream>
#include <mysql.h>#pragma comment(lib,"libmysql.lib")void show_result(MYSQL_RES* result)
{unsigned nFields = mysql_num_fields(result);my_ulonglong nRows = mysql_num_rows(result);MYSQL_FIELD* fields = mysql_fetch_fields(result);for (unsigned i = 0; i < nRows; i++) {MYSQL_ROW row = mysql_fetch_row(result);if (row != NULL) {for (unsigned j = 0; j < nFields; j++) {std::cout << "type:" << fields[j].type << " " << fields[j].name << ":" << row[j] << std::endl;}}}
}int main()
{MYSQL* mysql = new MYSQL();//MYSQL mysql;//占用的是栈上的内存MYSQL* pDB = mysql_init(mysql);if (pDB == NULL) {std::cout << "mysql_init failed!" << std::endl;return -1;}pDB = mysql_real_connect(pDB, "localhost", "root", "123456", "mysql", 3306, NULL, 0);std::cout << pDB << std::endl;if (pDB) {std::string sql = "CREATE DATABASE hello";int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;}MYSQL_RES* result = mysql_use_result(mysql);if (result != NULL) {show_result(result);std::cout << "===================================================" << std::endl;mysql_free_result(result);}//授予权限sql = "GRANT ALL ON hello.* TO 'hello'@'localhost';";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}result = mysql_use_result(mysql);if (result != NULL) {show_result(result);std::cout << "===================================================" << std::endl;mysql_free_result(result);}sql = "USE hello;";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}result = mysql_use_result(mysql);if (result != NULL) {show_result(result);std::cout << "===================================================" << std::endl;mysql_free_result(result);}sql = "DROP DATABASE hello;";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}result = mysql_use_result(mysql);if (result != NULL) {show_result(result);std::cout << "===================================================" << std::endl;mysql_free_result(result);}mysql_close(pDB);}delete mysql;return 0;
}

创建删除表

CREATE TABLE IF NOT EXISTS `表名称` (
`列名称1` 数据类型 关键字列表 默认值
...
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

关键字和含义如下:

  1. AUTO_INCREMENT 自动增加,只能用于整数类型列
  2. NOT NULL 列不能为空
  3. NULL 列可以为空
  4. PRIMARY KEY 主键 表中主键的值是唯一的,可以用于标记和查找数据
  5. UNSIGNED 无符号的数,只能修饰整数类型列
  6. DEFAULT 默认值  用于指定列的默认值
  7. UNIQUE 唯一 该列的要么为NULL要么就必须是唯一的,不可重复
  8. ZEROFILL  0值填充,如果没有指定该列的值,则会填入0

以下为删除MySQL数据表的通用语法:

DROP TABLE `表名称` ;

主键的数据类型,它不能是可变长度的类型,例如:TEXT、BLOB

表名需要使用``符号来包围,千万不能使用单引号

测试代码

#include <iostream>
#include <mysql.h>#pragma comment(lib,"libmysql.lib")void show_result(MYSQL_RES* result)
{unsigned nFields = mysql_num_fields(result);my_ulonglong nRows = mysql_num_rows(result);MYSQL_FIELD* fields = mysql_fetch_fields(result);for (unsigned i = 0; i < nRows; i++) {MYSQL_ROW row = mysql_fetch_row(result);if (row != NULL) {for (unsigned j = 0; j < nFields; j++) {std::cout << "type:" << fields[j].type << " " << fields[j].name << ":" << row[j] << std::endl;}}}
}int main()
{MYSQL* mysql = new MYSQL();//MYSQL mysql;//占用的是栈上的内存MYSQL* pDB = mysql_init(mysql);if (pDB == NULL) {std::cout << "mysql_init failed!" << std::endl;return -1;}pDB = mysql_real_connect(pDB, "localhost", "root", "123456", "mysql", 3306, NULL, 0);std::cout << pDB << std::endl;if (pDB) {std::string sql = "CREATE DATABASE hello";int ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;}MYSQL_RES* result = mysql_use_result(mysql);if (result != NULL) {show_result(result);std::cout << "===================================================" << std::endl;mysql_free_result(result);}//授予权限sql = "GRANT ALL ON hello.* TO 'hello'@'localhost';";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}result = mysql_use_result(mysql);if (result != NULL) {show_result(result);std::cout << "===================================================" << std::endl;mysql_free_result(result);}sql = "USE hello;";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}result = mysql_use_result(mysql);if (result != NULL) {show_result(result);std::cout << "===================================================" << std::endl;mysql_free_result(result);}sql = "CREATE TABLE IF NOT EXISTS `hello` (`编号` NVARCHAR(16) PRIMARY KEY)ENGINE=InnoDB DEFAULT CHARSET=utf8;";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}sql = "DROP TABLE `hello`;";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}sql = "DROP DATABASE hello;";ret = mysql_real_query(pDB, sql.c_str(), (unsigned long)sql.size());if (ret != 0) {std::cout << "mysql error:" << mysql_error(pDB) << std::endl;return -1;}mysql_close(pDB);}delete mysql;return 0;
}

相关文章:

MySQL数据库 编程入门

目录 MySQL数据库数据类型 MySQL数据库命令执行 创建用户 创建删除库 创建删除表 MySQL数据库数据类型 MySQL数据库定义了多种数据类型&#xff0c;下面是一些常见的MySQL数据类型及其对应的C/C类型&#xff1a; 整数类型&#xff1a; TINYINT&#xff1a;有符号范围-1…...

6.golang函数

函数是执行特定任务的代码块。函数接受输入&#xff0c;对输入执行一些计算&#xff0c;然后生成输出。 函数声明 在 go 中声明函数的语法是&#xff1a; func name(parameter) (result-list){//body }函数声明以func关键字开头&#xff0c;后跟name(函数名)。在括号中指定参…...

软件可靠性测试常见的方法

“测试”一般是指“为了发现程序中的错误而执行程序的过程”&#xff0c;可靠的测试性是相对重要的&#xff0c;在部分产品开始的测试阶段&#xff0c;需要的就是可靠的测试性&#xff0c;机构&#xff0c;所以存在意义较大。但是在不同的开发阶段、对于不同的人员&#xff0c;…...

C/C++字节对齐

C/C字节对齐 C/C字节对齐1.G_PACKED2.1 pack(push)2.2 pack(1) 全部例子 C/C字节对齐 1.G_PACKED #ifdef __GNUC__#define G_PACKED( __Declaration__ ) __Declaration__ __attribute__((packed)) #else#define G_PACKED( __Declaration__ ) __pragma( pack(push,1)) __Decla…...

【Android知识笔记】性能优化专题(四)

App 线程优化 线程调度原理 任意时刻,只有一个线程占用CPU,处于运行状态多线程并发:轮流获取CPU使用权JVM负责线程调度:按照特定机制分配CPU使用权线程调度模型 分时调度模型:轮流获取、均分CPU时间抢占式调度模型:优先级高的获取,JVM采用Android线程调度 nice值:Proc…...

DC电源模块的散热措施

BOSHIDA DC电源模块的散热措施 DC电源模块的散热措施可以分为以下几种&#xff1a; 1. 增加散热器&#xff1a;在DC电源模块的电路板上增加散热片或散热器&#xff0c;通过增加散热面积和散热能力来提高散热效果。 2. 增加风扇&#xff1a;在散热器的基础上增加风扇&#xff…...

uniapp H5、小程序、APP端自定义不同运行环境(开发、测试、生产)、自定义条件编译平台、以及动态修改manifest.json值讲解

文章目录 前言一、自定义条件编译平台是什么&#xff1f;二、新增自定义条件编译平台三、动态设置服务器请求地址四、动态修改manifest.json1.根目录新增文件 modifyManifest.js2.vue.config.js引入modifyManifest.js 总结示例代码 前言 企业项目开发流程上一般都要配置多个运…...

centos 显卡驱动安装(chatglm2大模型安装步骤一)

1.服务器配置 服务器系统:Centos7.9 x64 显卡:RTX3090 (24G) 2.安装环境 2.1 检查显卡驱动是否安装 输入命令:nvidia-smi(显示显卡信息) 如果有以下显示说明,已经有显卡驱动。否则需要重装。 2.2 下载显卡驱动 第一步:浏览器输入https://www.nvidia.cn/Downloa…...

05_属性描述符

05_属性描述符 文章目录 05_属性描述符一、属性描述符是什么&#xff1f;二、属性描述符①&#xff1a;查看属性描述②&#xff1a;设置属性描述符③&#xff1a;案例01.代码实现02.代码实现&#xff08;优化&#xff09; 一、属性描述符是什么&#xff1f; 属性描述符的结构 在…...

vue day2

1、指令修饰符&#xff1a;.指明一些指令后缀&#xff0c;不同后缀封装不同处理操作 按键修饰符&#xff1a;keyup.enter v-model修饰符&#xff1a; v-model.trim&#xff1a;去首位空格 v-model.number&#xff1a;转数字 事件修饰符&#xff1a; 阻止事件冒泡&#xff1…...

四川劳动保障杂志社四川劳动保障编辑部四川劳动保障杂志2023年第10期目录

主题报道 四川抢抓“金九银十”招聘季多措并举稳就业促就业 举措频“上新” 金秋送岗忙 张玉芳; 2-5 法眼《四川劳动保障》投稿&#xff1a;cnqikantg126.com 筑牢长期护理保险基金安全防线 李科仲;赖晓薇; 6-7 调研 提升职业技能培训工作的举措 寇爵; 8-9 城乡…...

python数据类型

int 整型 i 1str 字符串 name1Emliy name2"你好" content""" Emily&#xff1a;你好&#xff01; """ test你最"帅" test2"你最帅"float 浮点类型 height182.5 weight45.3bool 布尔类型 f1True f2Falselist …...

大数据-之LibrA数据库系统告警处理(ALM-37004 Datanode主备不同步或者断连)

告警解释 当DN主实例与DN备实例连接异常时&#xff0c;产生该告警。 告警属性 告警ID 告警级别 可自动清除 37004 严重 是 告警参数 参数名称 参数含义 ServiceName 产生告警的服务名称 RoleName 产生告警的角色名称 HostName 产生告警的主机名 Instance 产生…...

带你用uniapp从零开发一个仿小米商场_2.创建空白项目及公共样式引入

创建空白项目 打开uniapp 点击新建->项目 如下, 是编辑你项目的名字的地方是你项目存放地址,可以点击浏览器去文件管理里面选地址是模板选择,这里选择默认模板就好是一些其他选择比如uvue能让你项目在编译成软件时运行更快,unicloud能让你用js写后端,且直接就是云开发,g…...

1144. 连接格点,Kruskal算法,二维矩阵压缩为一维

有一个 m 行 n 列的点阵&#xff0c;相邻两点可以相连。 一条纵向的连线花费一个单位&#xff0c;一条横向的连线花费两个单位。 某些点之间已经有连线了&#xff0c;试问至少还需要花费多少个单位才能使所有的点全部连通。 输入格式 第一行输入两个正整数 m 和 n。 以下若…...

C++ : 友元(未完结)

不能从外部访问类的私有数据成员和方法&#xff0c;但这条规则不适用于友元类和友元函数。要声明友元 类或友元函数&#xff0c;可使用关键字 friend&#xff0c;通过让函数成为类的友元&#xff0c;可以赋予该函数与类的成员函数 同的访问权限。 生活中你的家有客厅 (Public)…...

Nginx 服务器 SSL 证书安装部署

操作场景 本文档以证书名称 menglinfeng.top 为例。 Nginx 版本以 nginx/1.18.0 为例。 当前服务器的操作系统为 CentOS 7&#xff0c;由于操作系统的版本不同&#xff0c;详细操作步骤略有区别。 安装 SSL 证书前&#xff0c;请您在 Nginx 服务器上开启 “443” 端口&#xf…...

GC9118S低压 5V 全桥驱动芯片,内置过温保护,低电流睡眠模式,可替代TMI8118

GC9118S 是一款低压 5V 全桥驱动芯 片&#xff0c;为摄像机、消费类产品、玩具和其他低 压或者电池供电的运动控制类应用提供了集 成的电机驱动解决方案。 GC9118S 能提供高达 1.1A 的持续输出 电流。可以工作在 2~6V 的电源电压上。 GC9118S 具有 PWM &#xff08; IN/…...

windows dockerdesktop 安装sqlserver2022

1.下载windows dockertop软件 下载连接 2.安装完成配置&#xff0c;下载源地址 {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": …...

在ubuntu系统安装SVN服务端,并通过客户端进行远程访问

文章目录 前言1. Ubuntu安装SVN服务2. 修改配置文件2.1 修改svnserve.conf文件2.2 修改passwd文件2.3 修改authz文件 3. 启动svn服务4. 内网穿透4.1 安装cpolar内网穿透4.2 创建隧道映射本地端口 5. 测试公网访问6. 配置固定公网TCP端口地址6.1 保留一个固定的公网TCP端口地址6…...

Chapter03-Authentication vulnerabilities

文章目录 1. 身份验证简介1.1 What is authentication1.2 difference between authentication and authorization1.3 身份验证机制失效的原因1.4 身份验证机制失效的影响 2. 基于登录功能的漏洞2.1 密码爆破2.2 用户名枚举2.3 有缺陷的暴力破解防护2.3.1 如果用户登录尝试失败次…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql

智慧工地管理云平台系统&#xff0c;智慧工地全套源码&#xff0c;java版智慧工地源码&#xff0c;支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求&#xff0c;提供“平台网络终端”的整体解决方案&#xff0c;提供劳务管理、视频管理、智能监测、绿色施工、安全管…...

Debian系统简介

目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版&#xff…...

多模态商品数据接口:融合图像、语音与文字的下一代商品详情体验

一、多模态商品数据接口的技术架构 &#xff08;一&#xff09;多模态数据融合引擎 跨模态语义对齐 通过Transformer架构实现图像、语音、文字的语义关联。例如&#xff0c;当用户上传一张“蓝色连衣裙”的图片时&#xff0c;接口可自动提取图像中的颜色&#xff08;RGB值&…...

什么是库存周转?如何用进销存系统提高库存周转率?

你可能听说过这样一句话&#xff1a; “利润不是赚出来的&#xff0c;是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业&#xff0c;很多企业看着销售不错&#xff0c;账上却没钱、利润也不见了&#xff0c;一翻库存才发现&#xff1a; 一堆卖不动的旧货…...

如何为服务器生成TLS证书

TLS&#xff08;Transport Layer Security&#xff09;证书是确保网络通信安全的重要手段&#xff0c;它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书&#xff0c;可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...

新能源汽车智慧充电桩管理方案:新能源充电桩散热问题及消防安全监管方案

随着新能源汽车的快速普及&#xff0c;充电桩作为核心配套设施&#xff0c;其安全性与可靠性备受关注。然而&#xff0c;在高温、高负荷运行环境下&#xff0c;充电桩的散热问题与消防安全隐患日益凸显&#xff0c;成为制约行业发展的关键瓶颈。 如何通过智慧化管理手段优化散…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...