【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.mzph.cn/bicheng/39827.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024 年人工智能和数据科学的五个主要趋势

引言 2023年&#xff0c;人工智能和数据科学登上了新闻头条。生成性人工智能的兴起无疑是这一显著提升曝光度的驱动力。那么&#xff0c;在2024年&#xff0c;该领域将如何继续占据头条&#xff0c;并且这些趋势又将如何影响企业的发展呢&#xff1f; 在过去几个月&#xff0c;…

Vue3实现点击按钮实现文字变色

1.动态样式实现 1.1核心代码解释&#xff1a; class"power-station-perspective-item-text"&#xff1a; 为这个 span 元素添加了一个 CSS 类&#xff0c;以便对其样式进行定义。 click"clickItem(item.id)"&#xff1a; 这是一个 Vue 事件绑定。当用户点…

ojdbc8-full Oracle JDBC 驱动程序的一个完整发行版各文件的功能

文章目录 1. ojdbc8.jar2. ons.jar -3. oraclepki.jar -4. orai18n.jar -5. osdt_cert.jar -6. osdt_core.jar -7. ojdbc.policy -8. README.txt -9. simplefan.jar -10. ucp.jar -11. xdb.jar - ojdbc8-full 是 Oracle JDBC 驱动程序的一个完整发行版&#xff0c;包含了连接和…

笔记——书签

书签 推荐系统 推荐系统之召回&#xff1a;https://cloud.baidu.com/article/3023263ES分页与排序&#xff1a;https://blog.csdn.net/weixin_44799217/article/details/127601687 测试 回归测试&#xff1a;https://www.cnblogs.com/codiary/p/17819289.html 机器学习 欠…

python-docx 拆分docx文档:按分节符拆分文档

本文目录 前言一、处理过程简述二、实现方式三、通过xml进行拆分1、完整代码【方式一】2、代码逻辑讲解3、实现效果图前言 本文主要处理的需求是,将一个docx文档,按节(section)分割成多个docx文档,分割后的文档保留原来文档的字体格式、页眉、页脚、水印等。 一、处理过…

SpringBoot 整合 SpringSecurity

1. 项目目录 2. pom.xml <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.6.3</version> </dependency> <dependency><groupId>org.sprin…

【CSS】深入浅出弹性布局

CSS的弹性布局&#xff08;Flexbox&#xff09;是一种用于在容器中沿着一维方向&#xff08;水平或垂直&#xff09;来布局、对齐和分配容器内项目空间的有效方式。它旨在提供一个更加有效的方式来布局、对齐和分配容器中项目的空间&#xff0c;即使它们的大小未知或是动态变化…

【手撕面试题】React(高频知识点一)

每天10道题&#xff0c;100天后&#xff0c;搞定所有前端面试的高频知识点&#xff0c;加油&#xff01;&#xff01;&#xff01;在看文章的同时&#xff0c;希望不要直接看答案&#xff0c;先思考一下自己会不会&#xff0c;如果会&#xff0c;自己的答案是什么&#xff1f;想…

XFeat快速图像特征匹配算法

XFeat&#xff08;Accelerated Features&#xff09;是一种新颖的卷积神经网络&#xff08;CNN&#xff09;架构&#xff0c;专为快速和鲁棒的像匹配而设计。它特别适用于资源受限的设备&#xff0c;同时提供了与现有深度学习方法相比的高速度和准确性。 轻量级CNN架构&#xf…

基于Datax开发支持瀚高数据库的插件_插件开发_以及部署---国产瀚高数据库工作笔记006

如果想直接使用,开发好的插件,那么可以去下载笔者上传的,打包好的插件,直接放入到 datax安装目录的./datax/plugin/reader 或者writer中就可以了 https://download.csdn.net/download/lidew521/89495306 https://download.csdn.net/download/lidew521/89495301这两个一个…

Unity之创建与导出PDF

内容将会持续更新&#xff0c;有错误的地方欢迎指正&#xff0c;谢谢! Unity之创建与导出PDF TechX 坚持将创新的科技带给世界&#xff01; 拥有更好的学习体验 —— 不断努力&#xff0c;不断进步&#xff0c;不断探索 TechX —— 心探索、心进取&#xff01; 助力快速…

SQLMap工具详解与SQL注入防范

SQLMap工具详解与SQL注入防范 大家好&#xff0c;我是微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天我们将深入探讨SQLMap工具的详细使用方法以及如何防范SQL注入攻击。 SQL注入简介 SQL注入是一种常见的安全漏洞&am…

PyPDF2指定范围拆分PDF文件为单个页面

本文目录 前言一、指定范围拆分PDF1、过程讲解2、拆分效果图3、完整代码二、其他问题1、更改页码索引值前言 上一篇文章讲解了怎么讲一个PDF文档分割为多个单页面PDF,本文来讲解一下进阶,就是指定范围拆分PDF页面,有的时候,我们只想把PDF文档中的某几页拆分出来,而不是全…

mmcv安装失败及解决方案

假如想安装的版本是mmcv1.4.0, 但是pip install mmcv1.4.0总是失败&#xff0c;若是直接pip install mmcv会安装成功&#xff0c;但是安装的就是最新版本&#xff0c;后面代码跑起来还会报错&#xff0c;怎么办呢&#xff1f; 接下来分享一个mmcv指定版本安装的方式。 网页&a…

计算属性和侦听属性有什么区别?

在 Vue.js 中&#xff0c;计算属性&#xff08;computed properties&#xff09;和侦听属性&#xff08;watcher&#xff09;是两种处理数据变化的方式&#xff0c;它们都允许开发者根据数据的变化来更新组件的状态。虽然它们的目标类似&#xff0c;但它们的工作方式和使用场景…

【Linux】性能分析器 perf 详解(四):trace

上一篇:【Linux】性能分析器 perf 详解(三) 1、trace 1.1 简介 perf trace 类似于 strace 工具:用于对Linux系统性能分析和调试的工具。 原理是:基于 Linux 性能计数器(Performance Counters for Linux, PCL),监控和记录系统调用和其他系统事件。 可以提供关于硬件…

数据存储方案选择:ES、HBase、Redis、MySQL与MongoDB的应用场景分析

一、概述 1.1 背景 在当今数据驱动的时代&#xff0c;选择合适的数据存储技术对于构建高效、可靠的信息系统至关重要。随着数据量的爆炸式增长和处理需求的多样化&#xff0c;市场上涌现出了各种数据存储解决方案&#xff0c;每种技术都有其独特的优势和适用场景。Elasticsear…

【Threejs进阶教程-着色器篇】1. Shader入门(ShadertoyShader和ThreejsShader入门)

ThreejsShader入门 关于本Shader教程认识ShaderShader和Threejs的关系WebGLShaderThreejsShaderShadertoyShader其他Shader 再次劝退数学不好的人从ShaderToy开始Shader的代码是强类型glsl的类型&#xff0c;变量&#xff0c;内置函数&#xff0c;关键字关于uv基于UV的颜色处理…

全网最详细的软件测试面试题总结+基础知识(完整版)

一、什么是软件&#xff1f; 软件是计算机系统中的程序和相关文件或文档的总称。 二、什么是软件测试&#xff1f; 说法一&#xff1a;使用人工或自动的手段来运行或测量软件系统的过程&#xff0c;以检验软件系统是否满足规定的要求&#xff0c;并找出与预期结果之间的差异…

Android 解决 “Module was compiled with an incompatible version of Kotlin“ 问题

解决 “Module was compiled with an incompatible version of Kotlin” 问题 在Android开发中&#xff0c;有时我们会遇到Kotlin版本不兼容的问题。具体来说&#xff0c;你可能会看到如下错误&#xff1a; D:/.gradle/caches/transforms-3/caf5371a15e0d6ffc362b4a5ece9cd49…