【JavaScript脚本宇宙】高效Web开发利器:全面解析六大HTML解析器与DOM库

精益求精:揭秘六个改变Web开发的HTML解析与DOM操作工具

前言

在现代Web开发中,HTML解析器和DOM操作库是不可或缺的工具。无论是爬取数据、处理复杂的HTML文档,还是模拟浏览器环境,这些工具都扮演着关键角色。本文将深入探讨六个广泛使用的HTML解析器和DOM操作库,它们分别是:htmlparser2、cheerio、jsdom、parse5、linkedom和x-ray。通过对这些工具的特点、用法、应用场景以及优势与局限性的详细介绍,帮助开发者了解并选择最适合的工具来满足具体需求。

欢迎订阅专栏:JavaScript脚本宇宙

文章目录

  • 精益求精:揭秘六个改变Web开发的HTML解析与DOM操作工具
    • 前言
    • 1. htmlparser2:一个快速且容错的HTML/XML解析器
      • 1.1 简介
      • 1.2 特点
        • 1.2.1 高性能
        • 1.2.2 容错机制
        • 1.2.3 流式解析
      • 1.3 用法
        • 1.3.1 安装
        • 1.3.2 基本用法示例
      • 1.4 应用场景
      • 1.5 优势与局限性
    • 2. cheerio:一个快速、灵活且精益的jQuery核心实现
      • 2.1 简介
      • 2.2 特点
        • 2.2.1 jQuery风格语法
        • 2.2.2 轻量级
        • 2.2.3 依赖少
      • 2.3 用法
        • 2.3.1 安装
        • 2.3.2 基本用法示例
      • 2.4 应用场景
      • 2.5 优势与局限性
    • 3. jsdom:一个基于JavaScript实现的HTML和DOM API
      • 3.1 简介
      • 3.2 特点
        • 3.2.1 浏览器环境模拟
        • 3.2.2 Node.js兼容性
        • 3.2.3 完整的DOM实现
      • 3.3 用法
        • 3.3.1 安装
        • 3.3.2 基本用法示例
      • 3.4 应用场景
      • 3.5 优势与局限性
        • 优势
        • 局限性
    • 4. parse5:一个用于Node.js的快速和宽松的HTML解析器
      • 4.1 简介
      • 4.2 特点
        • 4.2.1 宽容的解析器
        • 4.2.2 支持HTML5规范
        • 4.2.3 DOM树生成
      • 4.3 用法
        • 4.3.1 安装
        • 4.3.2 基本用法示例
      • 4.4 应用场景
      • 4.5 优势与局限性
    • 5. linkedom:一个轻量级的DOM实现用于现代浏览器API
      • 5.1 简介
      • 5.2 特点
        • 5.2.1 轻量级
        • 5.2.2 现代API支持
        • 5.2.3 快速处理
      • 5.3 用法
        • 5.3.1 安装
        • 5.3.2 基本用法示例
      • 5.4 应用场景
      • 5.5 优势与局限性
        • 5.5.1 优势
        • 5.5.2 局限性
    • 6. x-ray:用于爬取屏幕数据并解析成结构化数据的工具
      • 6.1 简介
      • 6.2 特点
        • 6.2.1 数据爬取能力
        • 6.2.2 灵活的选择器
        • 6.2.3 JSON输出
      • 6.3 用法
        • 6.3.1 安装
        • 6.3.2 基本用法示例
      • 6.4 应用场景
      • 6.5 优势与局限性
    • 总结

1. htmlparser2:一个快速且容错的HTML/XML解析器

1.1 简介

htmlparser2 是一个受欢迎的 HTML/XML 解析库,以其高性能和良好的容错机制而著称。它被广泛应用于解析和处理复杂的 HTML 和 XML 数据。

1.2 特点

1.2.1 高性能

htmlparser2 是用 JavaScript 编写的,它在解析速度方面表现出色,能够快速处理大规模的 HTML/XML 数据。

1.2.2 容错机制

该库具有强大的容错机制,可以解析不规范的 HTML 和 XML 文档,确保在面对各种格式的数据时依然能够稳定运行。

1.2.3 流式解析

htmlparser2 支持流式解析,可以处理一部分数据后继续接收更多数据,使得它在处理大型文件或流数据时尤为高效。

1.3 用法

1.3.1 安装

要使用 htmlparser2,首先需要安装 npm 包:

npm install htmlparser2
1.3.2 基本用法示例

以下是一个简单的实例代码,展示了如何使用 htmlparser2 解析 HTML 数据:

const htmlparser2 = require('htmlparser2');

const htmlContent = `
  <html>
    <head>
      <title>Example</title>
    </head>
    <body>
      <h1>Hello, World!</h1>
    </body>
  </html>
`;

const parser = new htmlparser2.Parser({
    onopentag(name, attribs) {
        console.log("Opening tag:", name);
    },
    ontext(text) {
        console.log("Text:", text);
    },
    onclosetag(tagname) {
        if (tagname === "script") {
            console.log("Closed script tag");
        }
    }
}, { decodeEntities: true });

parser.write(htmlContent);
parser.end();

你可以访问 htmlparser2 的官网 获取更多详细信息和文档。

1.4 应用场景

htmlparser2 广泛应用于以下几个领域:

  • Web爬虫:解析网页内容,提取数据。
  • HTML清理:处理和清理用户生成的 HTML 内容,例如博客评论和论坛帖子。
  • XML处理:解析和处理 XML 数据,用于配置文件和数据交换。

1.5 优势与局限性

优势

  • 高性能解析能力。
  • 良好的容错机制。
  • 支持流式解析,可处理大规模数据。

局限性

  • 由于其设计目标主要是解析,而不是操作 DOM 树,因此在某些场景下需要配合其他库使用(如 cheerio)。

完整 JavaScript 实例代码如下:

const htmlparser2 = require('htmlparser2');
const cheerio = require('cheerio');

// 示例 HTML 内容
const htmlContent = `
  <div>
    <h1>Title</h1>
    <p>This is a <strong>test</strong> paragraph.</p>
  </div>
`;

// 使用 htmlparser2 解析 HTML
const handler = new htmlparser2.DomHandler((error, dom) => {
  if (error) {
    console.error(error);
  } else {
    const $ = cheerio.load(dom);
    console.log("Parsed title:", $('h1').text());
    console.log("Parsed paragraph:", $('p').text());
  }
});

const parser = new htmlparser2.Parser(handler);
parser.write(htmlContent);
parser.done();

通过上面的实例代码,我们可以看到如何结合 htmlparser2cheerio 来解析和操作 HTML 数据。访问 htmlparser2 的官网 获取更多详细信息和文档。

2. cheerio:一个快速、灵活且精益的jQuery核心实现

2.1 简介

Cheerio 是一个快速、灵活的 HTML 解析库,它实现了 jQuery 大部分的核心功能,允许你在服务器端像在浏览器中一样操作 DOM。

2.2 特点

2.2.1 jQuery风格语法

Cheerio 使用与 jQuery 非常相似的 API,使得前端开发者能够轻松地在 Node.js 环境中处理 HTML 内容。

2.2.2 轻量级

Cheerio 专注于提供基本的 DOM 操作功能,去除了不必要的浏览器特性,因此相比于完整的 jQuery 库更加轻量。

2.2.3 依赖少

Cheerio 仅依赖于两个库:htmlparser2domhandler,这使得它足够小巧且高效。

2.3 用法

2.3.1 安装

要使用 Cheerio,首先需要通过 npm 安装:

npm install cheerio
2.3.2 基本用法示例

以下是一个简单的使用 Cheerio 从 HTML 文档中提取数据的示例:

const cheerio = require('cheerio');

// 假设我们有以下 HTML 内容
const htmlContent = `
  <ul id="fruits">
    <li class="apple">Apple</li>
    <li class="orange">Orange</li>
    <li class="pear">Pear</li>
  </ul>
`;

// 载入 HTML 内容
const $ = cheerio.load(htmlContent);

// 使用 jQuery 风格的选择器和方法
const fruits = [];
$('#fruits').find('li').each((index, element) => {
  fruits.push($(element).text());
});

console.log(fruits); // 输出: [ 'Apple', 'Orange', 'Pear' ]

更多详细信息请参阅 Cheerio 官方文档.

2.4 应用场景

Cheerio 在以下场景中特别有用:

  • 网页抓取: 从网页中提取并解析数据。
  • HTML 文档解析和操作: 在 server-side 脚本中读取、修改或生成 HTML 内容。
  • 测试 HTML 内容: 编写自动化测试时,检查生成的 HTML 是否符合预期结构。

2.5 优势与局限性

优势

  • 速度快:因为去掉了 jQuery 的许多浏览器相关特性,运行速度快。
  • API 熟悉:对于熟悉 jQuery 的开发者,学习成本极低。
  • 依赖少:使得项目更加轻量,减少打包体积。

局限性

  • 不支持浏览器特性:如事件绑定、动画等,因为这些都是浏览器特性。
  • DOM 操作有限:尽管大多数 jQuery 方法被实现,但仍有一些高级功能未被包含。

以下是一个更复杂的示例程序,演示如何在实际项目中使用 Cheerio 抓取网页标题:

const axios = require('axios');
const cheerio = require('cheerio');

async function fetchPageTitle(url) {
  try {
    const { data } = await axios.get(url);
    const $ = cheerio.load(data);
    return $('title').text();
  } catch (error) {
    console.error(`Error fetching page title: ${error.message}`);
    return null;
  }
}

fetchPageTitle('https://example.com').then(title => {
  console.log(`Fetched page title: ${title}`);
}).catch(error => {
  console.error(`Error: ${error}`);
});

此示例使用 axios 来获取网页内容,然后使用 Cheerio 提取网页的 <title> 标签。

更多案例和详细 API 参考可以查阅 Cheerio 官方文档。

3. jsdom:一个基于JavaScript实现的HTML和DOM API

3.1 简介

jsdom 是一个可以在 Node.js 中使用的 JavaScript 库,它提供了一个类似浏览器的环境来解析和操作 HTML 和 DOM。它通常用于服务器端渲染、网页抓取以及测试框架中。

3.2 特点

3.2.1 浏览器环境模拟

jsdom 模拟了一个完整的浏览器环境,使开发者能够在没有实际浏览器的情况下执行网页脚本。这包括对 window、document 等对象的支持。

const { JSDOM } = require("jsdom");
const dom = new JSDOM(`<html><body><p>Hello, world!</p></body></html>`);

console.log(dom.window.document.querySelector("p").textContent); // 输出: Hello, world!
3.2.2 Node.js兼容性

jsdom 完美兼容 Node.js,这意味着你可以在服务器端进行 DOM 操作,而不需要依赖客户端浏览器。这使得服务器端渲染(SSR)和网页抓取变得更加高效。

3.2.3 完整的DOM实现

jsdom 提供了完整的 DOM 实现,包括事件处理、节点操作等,几乎覆盖了所有浏览器中的 DOM API。这使得它成为一个强大的工具,用于服务器端的 DOM 操作和测试。

3.3 用法

3.3.1 安装

要使用 jsdom,你首先需要通过 npm 安装它:

npm install jsdom
3.3.2 基本用法示例

这里是如何使用 jsdom 来解析一个简单的 HTML 文档并进行一些基本的 DOM 操作:

const { JSDOM } = require("jsdom");

// 创建一个新的 JSDOM 实例
const dom = new JSDOM(`
  <html>
    <head></head>
    <body>
      <div id="content">Hello, world!</div>
    </body>
  </html>
`);

// 获取 document 对象
const document = dom.window.document;

// 查询并修改 DOM 元素
const contentDiv = document.getElementById("content");
contentDiv.textContent = "Hello, jsdom!";

console.log(contentDiv.outerHTML); // 输出: <div id="content">Hello, jsdom!</div>

3.4 应用场景

jsdom 可以用于以下几个主要的应用场景:

  • 服务器端渲染(SSR):在服务器上执行 JavaScript 以生成 HTML 内容。
  • 网页抓取:提取和处理网页内容,例如抓取文章或数据。
  • 自动化测试:在无头浏览器环境下进行 DOM 测试,模拟用户行为。

3.5 优势与局限性

优势
  • 轻量级:相比于完整的无头浏览器,如 Puppeteer,jsdom 更加轻量级,更适合简单的 DOM 操作。
  • 易用性:提供了与浏览器中几乎相同的 API,学习曲线较低。
  • 速度快:由于不需要启动完整的浏览器,处理速度较快。
局限性
  • 不支持 CSS:jsdom 不支持 CSS 的解析和渲染,因此无法进行样式相关的测试。
  • JavaScript 执行环境有限:虽然支持大部分 DOM API,但对于某些高级功能可能会有不足之处。

更多关于 jsdom 的信息,请参考 jsdom 官方文档。

4. parse5:一个用于Node.js的快速和宽松的HTML解析器

4.1 简介

parse5是一个用于Node.js的快速且宽容的HTML解析器。它支持HTML5规范,能够生成DOM树,并且能够处理宽松的HTML输入。这使得它非常适合于需要对HTML进行解析和操作的各种应用场景。

4.2 特点

4.2.1 宽容的解析器

parse5可以解析不符合标准的HTML内容,这意味着即使输入的HTML存在语法错误,它仍然能够正确地生成DOM树。

4.2.2 支持HTML5规范

parse5完全遵循HTML5规范,确保了在解析现代网页时具有高度的兼容性和准确性。

4.2.3 DOM树生成

通过解析HTML,parse5可以生成一个标准的DOM树,使得开发者可以方便地对其进行遍历和操作。例如,可以轻松提取特定节点或修改DOM中的元素。

4.3 用法

4.3.1 安装

要使用parse5,首先需要安装它。可以通过npm来完成此操作:

npm install parse5
4.3.2 基本用法示例

下面是一个简单的示例,展示了如何使用parse5解析HTML并生成DOM树:

const parse5 = require('parse5');

// 要解析的HTML字符串
const html = `
    <html>
        <head></head>
        <body>
            <div id="content">Hello, world!</div>
        </body>
    </html>
`;

// 使用parse5解析HTML
const document = parse5.parse(html);

// 遍历生成的DOM树
const bodyElement = document.childNodes[1].childNodes[1];

console.log(bodyElement); // 输出<body>...</body>节点

4.4 应用场景

parse5可以应用在多个场景中,包括但不限于:

  • 爬虫:解析网页内容以提取信息。
  • 静态网站生成器:将模板和数据结合生成完整的HTML页面。
  • Web测试:模拟浏览器环境,以测试网页组件。

4.5 优势与局限性

优势:

  • 宽容解析:能够处理格式不正确的HTML。
  • 高效:性能优异,在大型HTML文件上也能快速解析。
  • 支持HTML5:完全符合HTML5标准,确保现代网页的兼容性。

局限性:

  • 依赖于Node.js:仅能在Node.js环境下运行。
  • 缺少高级功能:相比于一些浏览器内置的解析器,parse5缺乏某些高级功能,如样式计算和脚本执行。

更多信息请访问parse5的官方文档。

5. linkedom:一个轻量级的DOM实现用于现代浏览器API

5.1 简介

linkedom 是一个轻量级的DOM实现,旨在提供与现代浏览器相同的API。它能够在服务器端进行快速的HTML解析和处理,非常适合需要在Node.js环境中操作DOM的应用程序。

官网链接: linkedom

5.2 特点

5.2.1 轻量级

linkedom 的设计注重轻量化,占用的内存和资源较少。它并不包含所有浏览器端复杂的依赖和功能,仅保留必要的DOM API。

5.2.2 现代API支持

linkedom 提供了对现代浏览器API的支持,包括最新的DOM规范,使您在服务器端也能使用类似于前端的方式操作DOM。

5.2.3 快速处理

由于其轻量级和高效的设计,linkedom 能够快速解析和处理HTML文档,显著提升服务器端渲染(SSR)的性能。

5.3 用法

5.3.1 安装

要在项目中使用 linkedom,首先需要通过npm进行安装:

npm install linkedom
5.3.2 基本用法示例

下面是一个使用 linkedom 解析HTML字符串并操作DOM元素的简单示例:

const { parseHTML } = require('linkedom');

// HTML 字符串
const html = `
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <div id="app">Hello, World!</div>
</body>
</html>
`;

// 解析 HTML
const { document } = parseHTML(html);

// 获取特定元素并修改内容
const appDiv = document.querySelector('#app');
appDiv.textContent = 'Hello, linkedom!';

console.log(document.documentElement.outerHTML);

5.4 应用场景

  • 服务器端渲染(SSR):在Node.js环境中预先生成HTML内容,提高首屏加载速度。
  • Web爬虫:解析和提取网页内容,如抓取新闻或商品信息。
  • 自动化测试:模拟浏览器行为进行DOM操作和断言,不需要在真实浏览器环境中测试。

5.5 优势与局限性

linkedom 作为一个轻量级的DOM实现,有其独特的优势和局限性:

5.5.1 优势
  • 轻量级:占用的内存和资源较少,适合在资源受限的环境中使用。
  • 快速:解析和操作速度快,适合需要高性能的应用场景。
  • 现代API支持:能够使用现代浏览器中的DOM API,无需担心兼容性问题。
5.5.2 局限性
  • 功能有限:相对于完整的浏览器环境,linkedom 不支持所有浏览器特性,如CSS解析和渲染。
  • 单一用途:主要用于DOM操作,不适合需要复杂客户端交互的任务。

通过以下代码,我们可以更清晰地看到这些优势和局限性的具体表现:

// 示例代码展示 linkedom 的优势和局限性
const { parseHTML } = require('linkedom');

// 示例HTML
const htmlSnippet = `
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Sample</title>
</head>
<body>
    <div id="content">Initial Content</div>
</body>
</html>
`;

// 使用 linkedom 解析HTML
const { document } = parseHTML(htmlSnippet);

// 优势:快速获取并修改内容
const contentDiv = document.querySelector('#content');
contentDiv.textContent = 'Updated Content';

// 局限性:无法处理CSS样式
// const style = window.getComputedStyle(contentDiv); // 在 linkedom 中不可用

console.log(document.documentElement.outerHTML);

通过上述代码示例,我们可以看到 linkedom 如何快速有效地操作DOM,但也明确指出了其在CSS处理上的局限性。

更多详细信息请访问 linkedom 官方文档。

6. x-ray:用于爬取屏幕数据并解析成结构化数据的工具

6.1 简介

x-ray 是一个强大的屏幕抓取和数据解析工具,主要用于从网页中提取结构化的数据。它可以帮助开发者轻松地从复杂的HTML页面中获取所需的信息,并以JSON格式输出。

官网链接:x-ray

6.2 特点

6.2.1 数据爬取能力

x-ray 提供了强大的数据爬取能力,使得开发者能够从各类网页中高效、准确地提取信息。

6.2.2 灵活的选择器

x-ray 支持灵活的CSS选择器,用于定位和提取特定的元素,这让数据抓取变得更加简洁和清晰。

6.2.3 JSON输出

x-ray 可以将抓取到的数据直接解析为JSON格式,方便后续的数据处理和使用。

6.3 用法

6.3.1 安装

要使用x-ray,首先需要通过 npm 进行安装:

npm install x-ray
6.3.2 基本用法示例

下面是一个基本的示例代码,演示如何使用 x-ray 从网页中提取数据并以JSON格式输出:

const Xray = require('x-ray');
const x = Xray();

x('https://news.ycombinator.com/', 'body', [{
  title: 'a.storylink',
  link: 'a.storylink@href'
}])
  .paginate('.morelink@href')
  .limit(3)
  .write('results.json');

在这个示例中,我们爬取 Hacker News 的标题和链接,并将结果保存到 results.json 文件中。

6.4 应用场景

x-ray 通常用于以下场景:

  • 从电商网站提取商品信息
  • 爬取新闻网站的文章标题和链接
  • 获取社交媒体平台上的用户评论和帖子内容

6.5 优势与局限性

优势:

  • 易于使用:x-ray 的API设计简单直观,即使对新手也很友好。
  • 功能强大:支持分页抓取、限制抓取数量等高级功能。
  • 输出灵活:可以直接输出为JSON格式,便于后续数据处理。

局限性:

  • 对动态加载内容支持有限:由于 x-ray 主要依赖静态HTML,对于动态生成的内容(如通过JavaScript加载的数据)支持较差。
  • 性能瓶颈:对于超大规模的数据抓取任务,性能可能不尽如人意。

通过以上内容,我们可以看到 x-ray 是一个非常实用的网页数据抓取工具,适合用于各种需要从网页中提取结构化数据的场景。如果你有相关需求,不妨试试看。

总结

综合来看,这六种HTML解析器和DOM操作库各有千秋,适用于不同的开发需求:

  1. htmlparser2:以其高性能和出色的容错机制适合需要快速且准确解析HTML/XML的项目。
  2. cheerio:轻量级且采用jQuery风格语法,使得熟悉jQuery的开发者能够快速上手,非常适合进行简单的HTML操作。
  3. jsdom:提供了完整的DOM实现和浏览器环境模拟,是Node.js开发者进行前端测试和模拟浏览器操作的理想选择。
  4. parse5:支持HTML5规范且解析宽松,适合作为Node.js中的一部分进行HTML5文档处理。
  5. linkedom:其轻量级和现代API支持非常适合需要快速处理DOM操作的场景。
  6. x-ray:强大的数据爬取能力和灵活的选择器,使其成为数据抓取和结构化数据提取的利器。

对于开发者来说,根据项目的具体需求选择合适的工具能够提升开发效率并保证项目质量。这些工具在功能和特点上互补,提供了从简单到复杂的各类解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/768405.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

上海站圆满结束!MongoDB Developer Day深圳站,周六见!

在过去两个周六的北京和上海 我们见证了两站热情高涨的 MongoDB Developer Day&#xff01; 近200位参会开发者相聚专业盛会 经过全天的动手实操和主题研讨会 MongoDB技能已是Next Level&#xff01; 最后一站Developer Day即将启程 期待本周六与各位在深圳相见&#xff0…

线程池666666

1. 作用 线程池内部维护了多个工作线程&#xff0c;每个工作线程都会去任务队列中拿取任务并执行&#xff0c;当执行完一个任务后不是马上销毁&#xff0c;而是继续保留执行其它任务。显然&#xff0c;线程池提高了多线程的复用率&#xff0c;减少了创建和销毁线程的时间。 2…

创建kset

1、kset介绍 2、相关结构体和api介绍 2.1 struct kset 2.2 kset_create_and_add kset_create_and_addkset_createkset_registerkobject_add_internalkobject_add_internal2.3 kset_unregister kset_unregisterkobject_delkobject_put3、实验操作 #include<linux/module.…

代码随想录第42天|动态规划

198.打家劫舍 参考 dp[j] 表示偷盗的总金额, j 表示前 j 间房(包括j)的总偷盗金额初始化: dp[0] 一定要偷, dp[1] 则取房间0,1的最大值遍历顺序: 从小到大 class Solution { public:int rob(vector<int>& nums) {if (nums.size() < 2) {return nums[0];}vector&…

[译]Reactjs性能篇

英文有限&#xff0c;技术一般&#xff0c;海涵海涵&#xff0c;由于不是翻译出身&#xff0c;所以存在大量的瞎胡乱翻译的情况&#xff0c;信不过我的&#xff0c;请看原文&#xff5e;&#xff5e; 原文地址&#xff1a;https://facebook.github.io/react/docs/advanced-per…

Java环境变量的设置

JAVA环境变量的设置 1.设置环境变量的作用2.如何设置环境变量2.1 找到系统的环境变量2.2 设置环境变量 1.设置环境变量的作用 说明&#xff1a;在Java中设置环境变量主要是为了能够让Java运行时能够找到Java开发工具包&#xff08;JDK&#xff09;的安装位置以及相关的库文件。…

Zabbix 配置端口监控

Zabbix 端口监控简介 在Zabbix中配置端口监控&#xff0c;可以帮助你实时监控服务器或网络设备上的特定端口是否开放和可访问。Zabbix提供了多种方式来监控端口&#xff0c;主要包括简单的端口可用性检查和更复杂的服务监控。 在Zabbix中进行端口监控时&#xff0c;不一定需要…

Ubuntu 安装Nginx服务

转自&#xff1a;https://blog.csdn.net/yegu001/article/details/135411588 Package: nginx Architecture: amd64 Version: 1.18.0-6ubuntu14.4 Priority: optional Section: web Origin: Ubuntu Maintainer: Ubuntu Developers <ubuntu-devel-discusslists.ubuntu.com>…

可充电纽扣电池ML2032充电电路设计

如图&#xff0c;可充电纽扣电池ML2032充电电路设计。 图中二极管是为了防止电流倒灌&#xff0c; 电阻分压出3.66v&#xff0c;再减掉二极管压降&#xff08;约0.4v)得3.26V&#xff0c;加在电池正负极充电。 随着电池电量的积累&#xff0c;充电电流逐步减小&#xff0c;极限…

魔行观察-AI数据分析-蜜雪冰城

摘要 本报告旨在评估蜜雪冰城品牌作为投资对象的潜力和价值&#xff0c;基于其经营模式、门店分布、人均消费、覆盖省份等关键指标进行分析。 数据数据源&#xff1a;魔行观察&#xff1a;http://www.wmomo.com/#/brand/brandDetails?code10013603 品牌概览 蜜雪冰城是中国…

[Information Sciences 2023]用于假新闻检测的相似性感知多模态提示学习

推荐的一个视频&#xff1a;p-tuning P-tunning直接使用连续空间搜索 做法就是直接将在自然语言中存在的词直接替换成可以直接训练的输入向量。本身的Pretrained LLMs 可以Fine-Tuning也可以不做。 这篇论文也解释了为什么很少在其他领域结合知识图谱的原因&#xff1a;就是因…

iOS 视图实现渐变色背景

需求 目的是要实现视图的自定义的渐变背景色&#xff0c;实现一个能够随时使用的工具。 实现讨论 在 iOS 中&#xff0c;如果设置视图单一的背景色&#xff0c;是很简单的。可是&#xff0c;如果要设置渐变的背景色&#xff0c;该怎么实现呢&#xff1f;其实也没有很是麻烦&…

普元EOS学习笔记-低开实现图书的增删改查

前言 在前一篇《普元EOS学习笔记-创建精简应用》中&#xff0c;我已经创建了EOS精简应用。 我之前说过&#xff0c;EOS精简应用就是自己创建的EOS精简版&#xff0c;该项目中&#xff0c;开发者可以进行低代码开发&#xff0c;也可以进行高代码开发。 本文我就记录一下自己在…

Sping源码(九)—— Bean的初始化(非懒加载)—mergeBeanDefinitionPostProcessor

序言 前几篇文章详细介绍了Spring中实例化Bean的各种方式&#xff0c;其中包括采用FactoryBean的方式创建对象、使用反射创建对象、自定义BeanFactoryPostProcessor以及构造器方式创建对象。 创建对象 这里再来简单回顾一下对象的创建&#xff0c;不知道大家有没有这样一个疑…

MySQL之备份与恢复(二)

备份与恢复 定义恢复需求 如果一切正常&#xff0c;那么永远也不需要考虑恢复。但是&#xff0c;一旦需要恢复&#xff0c;只有世界上最好的备份系统是没用的&#xff0c;还需要一个强大的恢复系统。 不幸的是&#xff0c;让备份系统平滑工作比构造良好的恢复过程和工具更容易…

优先级队列(堆)学的好,头发掉的少(Java版)

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. &#x1f92d;&#x1f92d;&#x1f92d;可能说的不是那么严谨.但小编初心是能让更多人…

使用 Ollama 时遇到的问题

题意&#xff1a; ImportError: cannot import name Ollama from llama_index.llms (unknown location) - installing dependencies does not solve the problem Python 无法从 llama_index.llms 模块中导入名为 Ollama 的类或函数 问题背景&#xff1a; I want to learn LL…

七大排序算法的深入浅出(java篇)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ 等等 &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支…

springboot 整合 mybatis-plus

一.前言 1. mybatis-plus是什么 mybatis-plus是一个对mybati框架的拓展框架&#xff0c;它在mybatis框架基础上做了许多的增强&#xff0c;帮助我们快速的进行代码开发。目前企业开发中&#xff0c;使用mybati的项目基本会选择使用mybatis-plus来提升开发效率。 2.官网地址&…

Study--Oracle-06-Oracler网络管理

一、ORACLE的监听管理 1、ORACLE网络监听配置文件 cd /u01/app/oracle/product/12.2.0/db_1/network/admin 2、在Oracle数据库中&#xff0c;监听器&#xff08;Listener&#xff09;是一个独立的进程&#xff0c;它监听数据库服务器上的特定端口上的网络连接请求&#xff0c…