shrink-dom
Version:
适用于网页分析、内容提取、AI训练数据准备和网页爬虫等场景,帮助开发者更高效地处理和优化DOM结构。
183 lines (131 loc) • 4.06 kB
Markdown
一个用于 DOM 树分析、压缩和内容提取的工具库。
[](./docs/README.en.md) | [日本語](./docs/README.ja.md) | [繁體中文](./docs/README.zh-TW.md)
- **DOM 分析**:使用 `DOMDomainAnalyzer` 分析 DOM 树,标记元素的可见性、交互性和可编辑性
- **DOM 压缩**:使用 `DOMShrinker` 压缩 HTML 结构,识别重复模式并生成模板化表示
- **内容提取**:使用 `DOMContentExtractor` 从 DOM 中提取有意义的内容,过滤广告和无关信息
```bash
npm install shrink-dom
yarn add shrink-dom
bun add shrink-dom
```
```typescript
import { DOMDomainAnalyzer } from 'shrink-dom';
// 在浏览器环境中分析当前页面
const analyzedHTML = DOMDomainAnalyzer.analyze();
console.log(analyzedHTML);
// 使用自定义配置
const analyzer = new DOMDomainAnalyzer({
annotationAttribute: 'data-custom-id',
enableHighlight: true,
highlightDuration: 1000
});
const result = analyzer.getAnalyzedHTML();
```
```typescript
import { DOMShrinker } from 'shrink-dom';
// 压缩 HTML 字符串
const html = `
<div class="card">
<h2>标题1</h2>
<p>内容1</p>
</div>
<div class="card">
<h2>标题2</h2>
<p>内容2</p>
</div>
`;
const compressed = DOMShrinker.compressHTMLString(html);
console.log(compressed);
// 使用自定义配置
const shrinker = new DOMShrinker({
minTemplateDepth: 3,
minTemplateOccurrences: 3,
templateIdPrefix: 'Template'
});
const result = shrinker.compressHTML(document.body);
```
```typescript
import { DOMContentExtractor } from 'shrink-dom';
// 创建提取器实例
const extractor = new DOMContentExtractor();
// 提取内容
const extractedContent = extractor.extract(document.body);
if (extractedContent && extractor.isContentMeaningful(extractedContent)) {
console.log('提取到有意义的内容:', extractedContent.outerHTML);
}
// 使用自定义配置
const customExtractor = new DOMContentExtractor({
skipKeywords: ['广告', '赞助'],
preservedAttributes: ['data-id', 'title', 'aria-label']
});
```
分析 DOM 树并标记元素的特性。
```typescript
// 配置选项
interface DOMDomainAnalyzerOptions {
annotationAttribute?: string; // 默认: 'data-xgl-id'
minInteractiveSize?: number; // 默认: 20
highlightStyle?: string; // 默认: 'brightness(1.2) contrast(1.1)'
highlightDuration?: number; // 默认: 500
enableHighlight?: boolean; // 默认: true
}
// 静态方法
DOMDomainAnalyzer.analyze(options?: DOMDomainAnalyzerOptions): string;
// 实例方法
new DOMDomainAnalyzer(options?: DOMDomainAnalyzerOptions);
analyzer.getAnalyzedHTML(): string;
```
压缩 HTML 结构,识别重复模式。
```typescript
// 配置选项
interface DOMShrinkerOptions {
minTemplateDepth?: number; // 默认: 2
minTemplateOccurrences?: number; // 默认: 2
templateIdPrefix?: string; // 默认: 'T'
}
// 静态方法
DOMShrinker.compressHTMLString(html: string, options?: DOMShrinkerOptions): string;
// 实例方法
new DOMShrinker(options?: DOMShrinkerOptions);
shrinker.compressHTML(document: Document | Element): string;
```
从 DOM 中提取有意义的内容。
```typescript
// 配置选项
interface ExtractorOptions {
skipKeywords?: string[]; // 要跳过的关键词
preservedAttributes?: string[]; // 要保留的属性
formElementTags?: string[]; // 表单元素标签
emphasisTags?: string[]; // 强调元素标签
briefTextThreshold?: number; // 简短文本阈值
}
// 实例方法
new DOMContentExtractor(options?: ExtractorOptions);
extractor.extract(element: ChildNode): ChildNode | null;
extractor.isContentMeaningful(element: ChildNode): boolean;
```
```bash
bun install
bun test
bun run build
```
MIT