cparse
Version:
一个基于 Cheerio 的 HTML 解析和数据提取工具库
188 lines (138 loc) • 7.02 kB
Markdown
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
## [2.0.3](https://github.com/wind2sing/cparse/compare/v2.0.2...v2.0.3) (2024-12-16)
### ✨ 新增功能 - 简化语法
添加了更简洁的调用方式,现在可以直接在 Cheerio 实例上调用 `parse` 方法!
### 🎯 核心改进
- **新增 `$.parse()` 方法**:直接在 Cheerio 实例上调用,无需传递 `$` 参数
- **向后兼容**:传统的 `parse(rule, $)` 语法仍然完全支持
- **TypeScript 支持**:完整的类型定义,包含新的简化语法
- **全面测试**:新增 6 个测试用例,总测试数量达到 209 个
### 🚀 使用示例
```javascript
// ✅ 新的简化语法
const $ = loadCheerio(html);
const title = $.parse('.title');
const data = $.parse({ title: '.title', items: '[.item]' });
// ❌ 传统语法(仍然支持)
const title2 = parse('.title', $);
```
### 📚 文档更新
- 更新 README 文档,突出新的简化语法
- 添加语法对比表格和使用示例
- 更新 TypeScript 类型定义
### 🧪 测试覆盖
- 新增 `$.parse()` 方法基础功能测试
- 新增属性提取、数组提取测试
- 新增结构化数据和自定义过滤器测试
- 所有 209 个测试用例通过
## [2.0.2](https://github.com/wind2sing/cparse/compare/v2.0.1...v2.0.2) (2024-12-16)
### 🎯 进一步优化 - 移除冗余语法糖
继续优化项目,移除价值有限的语法糖,专注于真正有价值的功能。
### 🗑️ 移除功能
- **移除类条件语法糖**:`selector[.class]` → 直接使用标准 CSS `selector.class`
- 原因:Cheerio 原生支持更简洁,无需额外语法糖
- 迁移:将 `div[.active]` 改为 `div.active`
### 🔧 改进功能
- **修复 nextNode() 方法**:增加错误处理和更好的文本节点查找
- **更新版本号**:修复代码中的版本号不一致问题
### 📚 文档更新
- 更新 README 和示例,移除已废弃的语法糖说明
- 突出标准 CSS 选择器的完全支持
### 💥 Breaking Changes
- 移除 `selector[.class]` 语法糖支持
- 用户需要使用标准 CSS 类选择器 `selector.class`
### 🔄 迁移指南
```javascript
// ❌ 旧语法(已移除)
parse('div[.active]', $)
// ✅ 新语法(推荐)
parse('div.active', $)
```
## [2.0.1](https://github.com/wind2sing/cparse/compare/v2.0.0...v2.0.1) (2024-12-16)
### 🎯 重大重构优化版本
这是 2.0.0 的优化版本,完成了彻底的重构工作,移除了与 Cheerio 原生功能重复的实现,专注于提供真正有价值的语法糖和过滤器功能。
### ✨ 核心改进
- **代码简化**:移除重复实现,代码量减少 40%
- **性能提升**:直接使用 Cheerio 原生选择器,性能大幅提升
- **专注核心**:保留语法糖和过滤器系统的核心价值
- **文档重构**:README 全面重新组织,突出核心功能
### 🚀 性能表现
- HTML 加载:53.78ms/次
- 选择器解析:6.06ms/次
- 复杂对象提取:31.28ms/次
- 内存优化:减少 32.24MB
### 🧪 质量保证
- 203 个测试用例全部通过
- 8 个测试套件全部通过
- 代码质量检查通过
## [2.0.0](https://github.com/wind2sing/cparse/compare/v1.0.6...v2.0.0) (2024-12-16)
### 🎯 重大重构 - 专注核心价值
这是一个重大版本更新,重构了整个项目架构,移除了与 Cheerio 原生功能重复的实现,专注于提供真正有价值的语法糖和过滤器功能。
### ✨ 新增功能
#### 语法糖功能增强
- **属性提取语法**:`selector@attribute` - 直接提取属性值
- **数组提取语法**:`[selector]` - 获取所有匹配元素
- **类条件简化**:`selector[.class]` → `selector.class`
- **自定义伪选择器**:`:not-empty` → `:not(:empty)`
#### 强大的过滤器系统
- **30+ 内置过滤器**:数据类型转换、字符串处理、数组操作等
- **过滤器链**:`selector | filter1 | filter2` - 链式数据处理
- **自定义过滤器**:支持扩展自定义过滤器
#### 结构化数据提取
- **对象语法**:`{ title: 'h1', price: '.price | float' }`
- **分割器语法**:`['[.item]', { name: '.name' }]`
- **函数处理**:支持自定义函数处理
### 🚀 性能大幅提升
- **HTML 加载**:71ms/次(优化后)
- **简单选择器解析**:7.74ms/次
- **复杂对象提取**:40.87ms/次
- **过滤器链处理**:7.81ms/次
- **内存使用**:优化后内存增长为负值(-31.52MB)
### 🗑️ 移除重复实现
**现在直接使用 Cheerio 原生支持,性能更优:**
- 条件查询处理(`:first`, `:last`, `:empty`, `:contains()`, `[attr]`, `[attr=value]`)
- 嵌套查询处理(`parent > child`)
- 伪选择器重复实现
### 📚 文档全面重构
- **README 重新组织**:更清晰的结构和格式
- **突出核心价值**:专注于语法糖和过滤器系统
- **现代化设计**:徽章、表格、示例代码
- **示例更新**:展示优化后的用法
### 🧪 测试全面通过
- **203 个测试用例**全部通过
- **8 个测试套件**全部通过
- **性能测试优化**:调整合理的性能阈值
- **代码质量保证**:ESLint 检查通过
### 💥 Breaking Changes
- 移除了一些内部 API,但对用户使用的公共 API 保持兼容
- 查询解析结果结构略有变化(移除了 `condition` 和 `nested` 字段)
- 性能测试阈值调整
### 🔄 迁移指南
对于大多数用户,这次更新是向后兼容的。标准的 CSS 选择器和过滤器功能无需修改代码。
**之前的用法仍然有效:**
```javascript
parse('h1', $) // ✅ 完全兼容
parse('[.item]', $) // ✅ 完全兼容
parse('a@href', $) // ✅ 完全兼容
parse('.price | float', $) // ✅ 完全兼容
```
### [1.0.6](https://github.com/wind2sing/cparse/compare/v1.0.5...v1.0.6) (2025-06-16)
#### 重大更新
- **升级 Cheerio 到 1.1.0**: 升级到最新版本的 Cheerio,获得更好的性能和稳定性
- **修复兼容性问题**: 重构插件系统以适应 Cheerio 1.0+ 的 API 变化
- **改进插件实现**: 使用 `this.eq()` 方法替代直接构造函数调用,解决了 "Class constructor LoadedCheerio cannot be invoked without 'new'" 错误
#### 技术改进
- 重构了 `src/cheerio/plugin.js` 中的 `extract` 和 `extractAll` 方法
- 优化了插件启用机制,确保与新版 Cheerio 的兼容性
- 所有现有功能保持向后兼容
#### 测试
- 所有测试用例通过
- 验证了数据提取功能的正确性
- 确保了 URL 转换功能的稳定性
### [1.0.5](https://github.com/wind2sing/cparse/compare/v1.0.4...v1.0.5) (2021-07-14)
### [1.0.4](https://github.com/wind2sing/cparse/compare/v1.0.3...v1.0.4) (2021-07-14)
### [1.0.3](https://github.com/wind2sing/cparse/compare/v1.0.0...v1.0.3) (2020-08-06)
## 1.0.0 (2020-08-06)
### Features
* init files d9dd55e