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

Python3网络爬虫开发实战(3)网页数据的解析提取

文章目录

  • 一、XPath
    • 1. 选取节点
    • 2. 查找某个特定的节点或者包含某个指定的值的节点
    • 3. XPath 运算符
    • 4. 节点轴
    • 5. 利用 lxml 使用 XPath
  • 二、CSS
  • 三、Beautiful Soup
    • 1. 信息提取
    • 2. 嵌套选择
    • 3. 关联选择
    • 4. 方法选择器
    • 5. css 选择器
  • 四、PyQuery
    • 1. 初始化
    • 2. css 选择器
    • 3. 信息提取
    • 4. 节点操作
  • 五、Parsel
    • 1. XPath 和 CSS 选择器
    • 2. 信息提取
    • 3. 正则提取

在这里插入图片描述

一、XPath

XPath 的全称 XML Path Language,即 XML 路径语言,用来在 XML 文档中查找信息,同样适用于 HTML 文档的搜索;

1. 选取节点

表达式描述
//*选取所有节点
/取子节点
//取子孙节点
.选取当前节点
选取当前节点的父节点
/@href选取节点的href属性
/[@class=“item”]选择 class 为 item 的子节点
/text()获取文本
//[contains(@class, “li”)]选择 class 中包含 li 的子节点
//[contains(@class, “li”) and contains(@class, “ll”)]选择 class 中包含 li 和 ll 的子节点
//[contains(@class, “li”) and @name=“item”]选择 class 包含 li 且 name 属性为 item 的节点
//[contains(text(), “内容”]选择文本中包含内容的节点
//th[@class="id " and position()=1]选择 class 为 id 的第一个位置的 th 节点
//div[(text()=‘更新’)]选择文本为 更新 的 div 节点

2. 查找某个特定的节点或者包含某个指定的值的节点

路径表达式结果
/bookstore/book[1]选取属于 bookstore 子元素的第一个 book 元素。
/bookstore/book[last()]选取属于 bookstore 子元素的最后一个 book 元素。
/bookstore/book[last()-1]选取属于 bookstore 子元素的倒数第二个 book 元素。
/bookstore/book[position()❤️]选取最前面的两个属于 bookstore 元素的子元素的 book 元素。
//title[@lang]选取所有拥有名为 lang 的属性的 title 元素。
//title[@lang=‘eng’]选取所有 title 元素,且这些元素拥有值为 eng 的 lang 属性。
/bookstore/book[price>35.00]选取 bookstore 元素的所有 book 元素,且其中的 price 元素的值须大于 35.00。
/bookstore/book[price>35.00]//title选取 bookstore 元素中的 book 元素的所有 title 元素,且其中的 price 元素的值须大于 35.00。

3. XPath 运算符

运算符描述实例返回值
|计算两个节点集//book | //cd返回所有拥有 book 和 cd 元素的节点集
+加法6 + 410
-减法6 - 42
*乘法6 * 424
div除法8 div 42
=等于price=9.80如果 price 是 9.80,则返回 true。

如果 price 是 9.90,则返回 false。
!=不等于price!=9.80如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。
<小于price<9.80如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。
<=小于或等于price<=9.80如果 price 是 9.00,则返回 true。

如果 price 是 9.90,则返回 false。
>大于price>9.80如果 price 是 9.90,则返回 true。

如果 price 是 9.80,则返回 false。
>=大于或等于price>=9.80如果 price 是 9.90,则返回 true。

如果 price 是 9.70,则返回 false。
orprice=9.80 or price=9.70如果 price 是 9.80,则返回 true。

如果 price 是 9.50,则返回 false。
andprice>9.00 and price<9.90如果 price 是 9.80,则返回 true。

如果 price 是 8.50,则返回 false。
mod计算除法的余数5 mod 21

4. 节点轴

轴名称结果
ancestor::选取当前节点的所有先辈(父、祖父等)。
ancestor-or-self::选取当前节点的所有先辈(父、祖父等)以及当前节点本身。
attribute::选取当前节点的所有属性。
child::选取当前节点的所有子元素。
descendant::选取当前节点的所有后代元素(子、孙等)。
descendant-or-self::选取当前节点的所有后代元素(子、孙等)以及当前节点本身。
following::选取文档中当前节点的结束标签之后的所有节点。
following-sibling::选取当前节点之后的所有兄弟节点
namespace::选取当前节点的所有命名空间节点。
parent::选取当前节点的父节点。
preceding::选取文档中当前节点的开始标签之前的所有节点。
preceding-sibling::选取当前节点之前的所有同级节点。

5. 利用 lxml 使用 XPath

from lxml import etreetext = 'html 代码'
html = etree.HTML(text) # 会自动修正 HTML 代码
result = html.xpath('xpath 选择器')

二、CSS

选择器示例示例说明
.class.intro选择所有class="intro"的元素
#id#firstname选择所有id="firstname"的元素
**选择所有元素
elementp选择所有<p>元素
element,elementdiv,p选择所有<div>元素和 <p> 元素
element.classp.hometown选择所有 class=“hometown” 的<p> 元素
element elementdiv p选择<div>元素内的所有<p>元素
element>elementdiv>p选择所有父级是<div> 元素的 <p> 元素
element+elementdiv+p选择所有紧跟在 <div> 元素之后的第一个 <p> 元素
[attribute][target]选择所有带有target属性元素
[attribute=value][target=-blank]选择所有使用target="-blank"的元素
[attribute~=value][title~=flower]选择标题属性包含单词"flower"的所有元素
[attribute|=language][lang|=en]选择 lang 属性等于 en,或者以 en- 为开头的所有元素
:linka:link选择所有未访问链接
:visiteda:visited选择所有访问过的链接
:activea:active选择活动链接
:hovera:hover选择鼠标在链接上面时
:focusinput:focus选择具有焦点的输入元素
:first-letterp:first-letter选择每一个<p>元素的第一个字母
:first-linep:first-line选择每一个<p>元素的第一行
:first-childp:first-child指定只有当<p>元素是其父级的第一个子级的样式。
:beforep:before在每个<p>元素之前插入内容
:afterp:after在每个<p>元素之后插入内容
:lang(language)p:lang(it)选择一个lang属性的起始值="it"的所有<p>元素
element1~element2p~ul选择p元素之后的每一个ul元素
[attribute^=value]a[src^=“https”]选择每一个src属性的值以"https"开头的元素
[attribute$=value]a[src$=“.pdf”]选择每一个src属性的值以".pdf"结尾的元素
[attribute*=value]a[src*=“runoob”]选择每一个src属性的值包含子字符串"runoob"的元素
p:firs-of-typep:first-of-type选择每个p元素是其父级的第一个p元素
:last-of-typep:last-of-type选择每个p元素是其父级的最后一个p元素
:only-of-typep:only-of-type选择每个p元素是其父级的唯一p元素
:only-childp:only-child选择每个p元素是其父级的唯一子元素
:nth-child(n)p:nth-child(2)选择每个p元素是其父级的第二个子元素
:nth-last-child(n)p:nth-last-child(2)选择每个p元素的是其父级的第二个子元素,从最后一个子项计数
:nth-of-type(n)p:nth-of-type(2)选择每个p元素是其父级的第二个p元素
:nth-last-of-type(n)p:nth-last-of-type(2)选择每个p元素的是其父级的第二个p元素,从最后一个子项计数
:last-childp:last-child选择每个p元素是其父级的最后一个子级。
:root:root选择文档的根元素
:emptyp:empty选择每个没有任何子级的p元素(包括文本节点)
:target#news:target选择当前活动的#news元素(包含该锚名称的点击的URL)
:enabledinput:enabled选择每一个已启用的输入元素
:disabledinput:disabled选择每一个禁用的输入元素
:checkedinput:checked选择每个选中的输入元素
:not(selector):not§选择每个并非p元素的元素
::selection::selection匹配元素中被用户选中或处于高亮状态的部分
:out-of-range:out-of-range匹配值在指定区间之外的input元素
:in-range:in-range匹配值在指定区间之内的input元素
:read-write:read-write用于匹配可读及可写的元素
:read-only:read-only用于匹配设置 “readonly”(只读) 属性的元素
:optional:optional用于匹配可选的输入元素
:required:required用于匹配设置了 “required” 属性的元素
:valid:valid用于匹配输入值为合法的元素
:invalid:invalid用于匹配输入值为非法的元素

三、Beautiful Soup

Beautiful Soup 支持的解析器有四种: html.parserlxmllxml-xmlhtml5lib

解析器使用方法优势劣势
Python标准库BeautifulSoup(markup,“html.parser”)1 Python的内置标准库
2 执行速度适中
3 文档容错能力强
Python 2.7.3 or 3.2.2)前 的版本中文档容错能力差
lxml HTML 解析器BeautifulSoup(markup,“lxml”)1.速度快
2.文档容错能力强
需要安装C语言库
lxml XML 解析器BeautifulSoup(markup,[“lxml-xml”])1.速度快
2.唯一支持XML的解析器
需要安装C语言库
html5libBeautifulSoup(markup,“html5lib”)1 最好的容错性
2以浏览器的方式解析文档
3生成HTML5格式的文档
1.速度慢
2.不依赖外部扩展
from bs4 import BeautifulSouphtml = 'html 文本'
soup = BeautifulSoup(html, 'lxml')
soup.prettify() # 可以将杂乱的 html 文本格式化,soup对于不标准的 HTML 字符串,自动更正格式,与prettify 无关;

1. 信息提取

soup.tagname 得到的结果是 bs4.element.Tag 类型,而 bs4.element.Tag 可以调用 string,name,attrs 获取 Tag 的信息;

soup.title # 选择 soup 下的第一个 title tag节点
soup.title.string # soup 下第一个 title tag节点的文本
soup.title.get_text() # soup 下第一个 title tag节点的文本
soup.title.name # soup 下第一个 title tag节点的名称 即title
soup.title.attrs # soup 下第一个 title tag 节点的attrs 是一个字典

2. 嵌套选择

bs4.element.Tag 类型在继续调用 tagname 后得到的仍然是 bs4.element.Tag 类型,因此我们可以嵌套获取信息

soup.head.title.string # 获得 soup 下第一个 head 下第一个 title 的 string

3. 关联选择

选取节点后,如果想要获取它的直接子节点,可以调用 contents 属性,实例如下

from bs4 import BeautifulSouphtml = 'html 文本'
soup = BeautifulSoup(html, 'lxml')soup.p.contents # 获得直接子节点
soup.p.children # 等价于 soup.p.contentssoup.p.descendants # 获得所有的子孙节点soup.p.parent # 获得p节点的父节点soup.p.parents # 获取p节点所有祖先节点soup.next_sibling # 获取节点的下一个兄弟节点soup.previous_sibling # 获取节点的上一个兄弟节点soup.next_siblings # 获取节点的后面的所有兄弟节点soup.previous_siblings # 获取节点的前面的所有兄弟节点

4. 方法选择器

# 选择所有 tag 为 li,属性 id 为 list,text 中包含 link 的节点
soup.find_all(name='li', attrs={'id':'list'}, text=re.compile('link'))# 选择第一个 tag 为 li,属性 id 为 list,text 中包含 link 的节点
soup.find(name='li', attrs={'id':'list'}, text=re.compile('link'))
  • find_parents 和 find_parent:前者返回所有的祖先节点,后者返回父节点;
  • find_next_siblings 和 find_next_sibling:前者返回后面的所有兄弟节点,后者返回前面第一个兄弟节点;
  • find_previous_siblings 和 find_previous_sibling:前者返回前面的所有兄弟节点,后者返回后面第一个兄弟节点;
  • find_all_next 和 find_next:前者返回节点后面所有符合要求的节点,后者返回后面第一个符合要求的节点;
  • find_all_previous 和 find_previous:前者返回节点前面所有符合条件的节点,后者返回前面第一个符合要求的节点;

5. css 选择器

利用 soup.select(‘css选择器’) 来选择 tag,利用 select 返回的结果一定是一个列表

from bs4 import BeautifulSoupsoup = BeautifulSoup(html, 'lxml')
soup.select('li')

四、PyQuery

1. 初始化

from pyquery import PyQuery# 字符串的初始化
html = "文档字符串"
doc = PyQuery(html)# url的初始化
doc = PyQuery(url='url 地址')# 文件的初始化
doc = PyQuery(filename='index.html')

2. css 选择器

使用起来非常简单,直接 doc(‘css选择器’)

from pyquery import PyQuerydoc = PyQuery(url='https://www.baidu.com')
for i  in doc('div').items():# 解决编码问题print(i.html().encode('raw_unicode_escape').decode('utf-8', errors='ignore')) 

3. 信息提取

  • attr:当返回结果包含多个节点时,调用 attr 方法只会得到第一个节点的属性,若要得到所有则需要使用 items() 遍历;
  • html:返回的是 第一个节点内部的纯文本信息;
  • text:返回的是所有节点内部的纯文本信息;
from pyquery import PyQueryhtml = ''
doc = PyQuery(html)
a = doc('a')# 获取属性
a.attr('href')
a.attr.href# 获取文本
a.html()
a.text()

4. 节点操作

PyQuery 库提供了一系列方法对节点进行动态修改,例如为某个节点添加一个 class,移除某个节点等等,有时候这些操作会为提取信息带来极大的便利;

li = doc('li')# 移除/添加 class 中 active 值
li.removeClass('active')
li.addClass('active')# 获取 name 属性的值
li.attr('name')# 修改 name 属性的值 为 'link'
li.attr('name', 'link')# 获取纯文本
li.text()# 改变纯文本
li.text('hello')# 获取纯html
li.html()# 改变html
li.html('html文本')

五、Parsel

Parsel 库可以解析 HTML 和 XML ,并支持使用 XPath 和 CSS 选择器对内容进行提取和修改,同时还融合了正则表达式的提取功能,parsel 是 Python 最流行的爬虫框架 Scrapy 的底层支持;

1. XPath 和 CSS 选择器

from parsel import Selectorhtml = ''
selector = Selector(text=html)# css
items = selector.css('css选择器')
# xpath
items = selector.xpath('xpath选择器')

2. 信息提取

  • get:从 selectorlist 对象中提取第一个 Selector 对象,然后输出其中的结果
  • getall:从 selectorlist 对象中提取所有的 Selector 对象,然后以列表的形式输出其中的结果
# 提取文本
selector.css('css选择器::text()').get()
selector.css('css选择器::text()').getall()
selector.xpath('xpath//text()').get()
selector.xpath('xpath//text()').getall()# 提取属性
selector.css('css选择器::attr(name)').get()
selector.css('css选择器::attr(href)').getall()
selector.xpath('xpath/@name()').get()
selector.xpath('xpath/@href()').getall()

3. 正则提取

  • 如果选择器中是属性或者文本,那么 re 对属性或者文本进行匹配
  • 如果选择器中不是属性和文本,那么 re 对该节点的 html 字符进行匹配
from parsel import Selectorhtml = ''
selector = Selector(text=html)
result = selector.css('css选择器').re('a.*')
result = selector.xpath('xpath').re('a.*')result = selector.css('css选择器').re_first('a.*')
result = selector.xpath('xpath').re_first('a.*')

相关文章:

Python3网络爬虫开发实战(3)网页数据的解析提取

文章目录 一、XPath1. 选取节点2. 查找某个特定的节点或者包含某个指定的值的节点3. XPath 运算符4. 节点轴5. 利用 lxml 使用 XPath 二、CSS三、Beautiful Soup1. 信息提取2. 嵌套选择3. 关联选择4. 方法选择器5. css 选择器 四、PyQuery1. 初始化2. css 选择器3. 信息提取4. …...

基于 HTML+ECharts 实现监控平台数据可视化大屏(含源码)

构建监控平台数据可视化大屏&#xff1a;基于 HTML 和 ECharts 的实现 监控平台的数据可视化对于实时掌握系统状态、快速响应问题至关重要。通过直观的数据展示&#xff0c;运维团队可以迅速发现异常&#xff0c;优化资源配置。本文将详细介绍如何利用 HTML 和 ECharts 实现一个…...

立创梁山派--移植开源的SFUD和FATFS实现SPI-FLASH文件系统

本文主要是在sfud的基础上进行fatfs文件系统的移植&#xff0c;并不对sfud的移植再进行过多的讲解了哦&#xff0c;所以如果想了解sfud的移植过程&#xff0c;请参考我的另外一篇文章&#xff1a;传送门 正文开始咯 首先我们需要先准备资料准备好&#xff0c;这里对于fatfs的…...

MySQL之视图和索引实战

1.新建数据库 mysql> create database myudb5_indexstu; Query OK, 1 row affected (0.01 sec) mysql> use myudb5_indexstu; Database changed 2.新建表 1.学生表student&#xff0c;定义主键&#xff0c;姓名不能重名&#xff0c;性别只能输入男或女&#xff0c;所在…...

快速参考:用C# Selenium实现浏览器窗口缩放的步骤

背景介绍 在现代网络环境中&#xff0c;浏览器自动化已成为数据抓取和测试的重要工具。Selenium作为一个强大的浏览器自动化工具&#xff0c;能够与多种编程语言结合使用&#xff0c;其中C#是非常受欢迎的选择之一。在实际应用中&#xff0c;我们常常需要调整浏览器窗口的缩放…...

MyBatis 插件机制、分页插件如何实现的

MyBatis 插件机制允许开发者在 SQL 执行的各个阶段&#xff08;如预处理、执行、结果处理等&#xff09;中插入自定义逻辑&#xff0c;从而实现对 MyBatis 行为的扩展和增强。以下是 MyBatis 插件运行原理的详细介绍&#xff1a; 插件接口 MyBatis 插件通过实现 org.apache.i…...

CentOS6.0安装telnet-server启用telnet服务

CentOS6.0安装telnet-server启用telnet服务 一步到位 fp"/etc/yum.repos.d" ; cp -a ${fp} ${fp}.$(date %0y%0m%0d%0H%0M%0S).bkup echo [base] nameCentOS-$releasever - Base baseurlhttp://mirrors.163.com/centos-vault/6.0/os/$basearch/http://mirrors.a…...

H5+CSS+JS工作性价比计算器

工作性价比&#xff1d;平均日新x综合环境系数/35 x(工作时长&#xff0b;通勤时长—0.5 x摸鱼时长) x学历系数 如果代码中的公式不对&#xff0c;请指正 效果图 源代码 <!DOCTYPE html> <html> <head> <style> .calculator { width: 300px; padd…...

Linux:基础命令学习

目录 一、ls命令 实例&#xff1a;-l以长格式显示文件和目录信息 实例&#xff1a;-F根据文件类型在列出的文件名称后加一符号 实例&#xff1a; -R 递归显示目录中的所有文件和子目录。 实例&#xff1a; 组合使用 Home目录和工作目录 二、目录修改和查看命令 三、mkd…...

遇到Websocket就不会测了?别慌,学会这个Jmeter插件轻松解决....

websocket 是一种双向通信协议&#xff0c;在建立连接后&#xff0c;websocket服务端和客户端都能主动向对方发送或者接收数据&#xff0c;而在http协议中&#xff0c;一个request只能有一个response&#xff0c;而且这个response也是被动的&#xff0c;不能主动发起。 websoc…...

高性能 Java 本地缓存 Caffeine 框架介绍及在 SpringBoot 中的使用

在现代应用程序中&#xff0c;缓存是一种重要的性能优化技术&#xff0c;它可以显著减少数据访问延迟&#xff0c;降低服务器负载&#xff0c;提高系统的响应速度。特别是在高并发的场景下&#xff0c;合理地使用缓存能够有效提升系统的稳定性和效率。 Caffeine 是一个高性能的…...

Http 和 Https 的区别(图文详解)

在现代网络通信中&#xff0c;保护数据的安全性和用户的隐私是至关重要的。HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和 HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是两种常见的网络通信协议&#xff0c;但它们在数据保护方面的能力存在…...

DP学习——外观模式

学而时习之&#xff0c;温故而知新。 外观模式 角色 2个角色&#xff0c;外观类&#xff0c;子系统类。 个人理解 感觉就是对外接口封装&#xff0c;这个是封装一个功能的对外接口&#xff0c;越简单越好&#xff0c;提供给第三方用。 应用场景 封装为对外库时&#xff…...

Vue3 + Vite 打包引入图片错误

1. 具体报错 报错信息 报错代码 2. 解决方法 改为import引入&#xff0c;注意src最好引用为符引入&#xff0c;不然docker部署的时候可能也会显示不了 <template><img :src"loginBg" alt""> </template><script langts setup> …...

搭建NFS、web、dns服务器

目录 1、搭建一个nfs服务器&#xff0c;客户端可以从该服务器的/share目录上传并下载文件 服务端配置&#xff1a; 客户端测试&#xff1a; 2、搭建一个Web服务器&#xff0c;客户端通过www.haha.com访问该网站时能够看到内容:this is haha 服务端配置&#xff1a; 客户端…...

C++的UI框架和开源项目介绍

文章目录 1.QT2.wxWidgets3.Dear ImGui 1.QT QT的开源项目&#xff1a;QGIS&#xff08;地理信息系统&#xff09; https://github.com/qgis/QGIS?tabreadme-ov-file 2.wxWidgets wxWidgets的开源项目&#xff1a;filezilla https://svn.filezilla-project.org/svn/ wxWidg…...

SpringBoot连接PostgreSQL+MybatisPlus入门案例

项目结构 一、Java代码 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://mave…...

vue3里将table表格中的数据导出为excel

想要实现前端对表格中的数据进行导出&#xff0c;这里推荐使用xlsx这个依赖库实现。 1、安装 pnpm install xlsx 2、使用 import * as XLSX from "xlsx"; 直接在组件里导入XLSX库&#xff0c;然后给表格table通过ref创建响应式数据拿到table实例&#xff0c;将实…...

【算法】分布式共识Paxos

一、引言 在分布式系统中&#xff0c;一致性是至关重要的一个问题。Paxos算法是由莱斯利兰伯特&#xff08;Leslie Lamport&#xff09;在1990年提出的一种解决分布式系统中一致性问题的算法。 二、算法原理 Paxos算法的目标是让一个分布式系统中的多个节点就某个值达成一致。算…...

软考:软件设计师 — 5.计算机网络

五. 计算机网络 1. OSI 七层模型 层次名称主要功能主要设备及协议7应用层实现具体的应用功能 POP3、FTP、HTTP、Telent、SMTP DHCP、TFTP、SNMP、DNS 6表示层数据的格式与表达、加密、压缩5会话层建立、管理和终止会话4传输层端到端的连接TCP、UDP3网络层分组传输和路由选择 三…...

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述&#xff0c;后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作&#xff0c;其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

大语言模型(LLM)中的KV缓存压缩与动态稀疏注意力机制设计

随着大语言模型&#xff08;LLM&#xff09;参数规模的增长&#xff0c;推理阶段的内存占用和计算复杂度成为核心挑战。传统注意力机制的计算复杂度随序列长度呈二次方增长&#xff0c;而KV缓存的内存消耗可能高达数十GB&#xff08;例如Llama2-7B处理100K token时需50GB内存&a…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...

Redis:现代应用开发的高效内存数据存储利器

一、Redis的起源与发展 Redis最初由意大利程序员Salvatore Sanfilippo在2009年开发&#xff0c;其初衷是为了满足他自己的一个项目需求&#xff0c;即需要一个高性能的键值存储系统来解决传统数据库在高并发场景下的性能瓶颈。随着项目的开源&#xff0c;Redis凭借其简单易用、…...

C++实现分布式网络通信框架RPC(2)——rpc发布端

有了上篇文章的项目的基本知识的了解&#xff0c;现在我们就开始构建项目。 目录 一、构建工程目录 二、本地服务发布成RPC服务 2.1理解RPC发布 2.2实现 三、Mprpc框架的基础类设计 3.1框架的初始化类 MprpcApplication 代码实现 3.2读取配置文件类 MprpcConfig 代码实现…...

五、jmeter脚本参数化

目录 1、脚本参数化 1.1 用户定义的变量 1.1.1 添加及引用方式 1.1.2 测试得出用户定义变量的特点 1.2 用户参数 1.2.1 概念 1.2.2 位置不同效果不同 1.2.3、用户参数的勾选框 - 每次迭代更新一次 总结用户定义的变量、用户参数 1.3 csv数据文件参数化 1、脚本参数化 …...

Axure Rp 11 安装、汉化、授权

Axure Rp 11 安装、汉化、授权 1、前言2、汉化2.1、汉化文件下载2.2、windows汉化流程2.3、 macOs汉化流程 3、授权 1、前言 Axure Rp 11官方下载链接&#xff1a;https://www.axure.com/downloadthanks 2、汉化 2.1、汉化文件下载 链接: https://pan.baidu.com/s/18Clf…...

Spring是如何实现无代理对象的循环依赖

无代理对象的循环依赖 什么是循环依赖解决方案实现方式测试验证 引入代理对象的影响创建代理对象问题分析 源码见&#xff1a;mini-spring 什么是循环依赖 循环依赖是指在对象创建过程中&#xff0c;两个或多个对象相互依赖&#xff0c;导致创建过程陷入死循环。以下通过一个简…...

2025-06-01-Hive 技术及应用介绍

Hive 技术及应用介绍 参考资料 Hive 技术原理Hive 架构及应用介绍Hive - 小海哥哥 de - 博客园https://cwiki.apache.org/confluence/display/Hive/Home(官方文档) Apache Hive 是基于 Hadoop 构建的数据仓库工具&#xff0c;它为海量结构化数据提供类 SQL 的查询能力&#xf…...