Web Reader Pro - OpenClaw Skill
Overview
Web Reader Pro is an advanced web content extraction skill for OpenClaw that uses a multi-tier fallback strategy with intelligent routing, caching, and quality assessment.
Features
1. Three-Tier Fallback Strategy
- - Tier 1: Jina Reader API - Fast, reliable, best for most websites
- Tier 2: Scrapling + Playwright - Dynamic content rendering for JS-heavy sites
- Tier 3: WebFetch Fallback - Basic extraction for simple pages
2. Jina Quota Monitoring
- - Tracks API call count with persistent counter
- Warning alerts when approaching quota limits
- Automatic fallback to lower-tier methods when quota exhausted
3. Smart Cache Layer
- - Short-term caching (configurable TTL, default 1 hour)
- Cache key based on URL hash
- Reduces redundant API calls
4. Extraction Quality Scoring
- - Scores based on: word count, title detection, content density
- Minimum quality threshold (default: 200 words + valid title)
- Auto-escalation to next tier if quality below threshold
5. Domain-Level Routing Learning
- - Learns optimal extraction tier per domain
- Persists learned routes in local JSON database
- Adapts based on historical success rates
6. Retry with Exponential Backoff
- - Configurable max retries per tier (default: 3)
- Exponential backoff: 1s, 2s, 4s, 8s...
- Respects rate limits and transient failures
Installation
CODEBLOCK0
Usage
Basic Usage
CODEBLOCK1
Advanced Configuration
CODEBLOCK2
Result Format
CODEBLOCK3
Environment Variables
| Variable | Description | Default |
|---|
| INLINECODE0 | Jina Reader API key | Required for Tier 1 |
| INLINECODE1 |
Cache directory path |
~/.openclaw/cache/web-reader-pro/ |
|
WEB_READER_LEARNING_DB | Learning database path |
~/.openclaw/data/web-reader-pro/routes.json |
|
WEB_READER_JINA_QUOTA | Jina quota limit |
100000 |
API Reference
WebReaderPro.fetch(url, force_refresh=False)
Fetch and extract content from a URL.
Parameters:
- -
url (str): Target URL - INLINECODE8 (bool): Bypass cache if True
Returns: Dict with title, content, metadata
WebReaderPro.fetchwithtier(url, preferred_tier)
Fetch using a specific tier (bypassing automatic selection).
Parameters:
- -
url (str): Target URL - INLINECODE10 (str): "jina", "scrapling", or "webfetch"
WebReaderPro.getjinastatus()
Get current Jina API quota usage.
Returns: Dict with count, limit, percentage, warnings
WebReaderPro.clear_cache(url=None)
Clear cache for specific URL or all URLs.
Parameters:
- -
url (str, optional): Specific URL to clear, or None for all
WebReaderPro.getdomainroutes()
Get learned domain-to-tier mappings.
Returns: Dict of domain -> preferred tier
Tier Comparison
| Tier | Speed | JS Rendering | Best For | Cost |
|---|
| Jina | Fast | No | Static pages, articles | API calls |
| Scrapling |
Medium | Yes | SPAs, dynamic content | CPU |
| WebFetch | Fastest | No | Simple pages, fallbacks | Free |
License
MIT
Web Reader Pro - OpenClaw 技能
概述
Web Reader Pro 是 OpenClaw 的高级网页内容提取技能,采用多层回退策略,具备智能路由、缓存和质量评估功能。
特性
1. 三层回退策略
- - 第一层:Jina Reader API - 快速可靠,适用于大多数网站
- 第二层:Scrapling + Playwright - 为重度 JS 网站提供动态内容渲染
- 第三层:WebFetch 回退 - 适用于简单页面的基础提取
2. Jina 配额监控
- - 使用持久计数器跟踪 API 调用次数
- 接近配额限制时发出警告
- 配额耗尽时自动回退到较低层级方法
3. 智能缓存层
- - 短期缓存(可配置 TTL,默认 1 小时)
- 基于 URL 哈希的缓存键
- 减少冗余 API 调用
4. 提取质量评分
- - 基于以下指标评分:字数、标题检测、内容密度
- 最低质量阈值(默认:200 字 + 有效标题)
- 质量低于阈值时自动升级到下一层级
5. 域名级路由学习
- - 学习每个域名的最佳提取层级
- 将学习到的路由持久化到本地 JSON 数据库
- 基于历史成功率自适应调整
6. 指数退避重试
- - 每层可配置最大重试次数(默认:3)
- 指数退避:1秒、2秒、4秒、8秒...
- 尊重速率限制并处理临时故障
安装
bash
安装依赖
pip install -r requirements.txt
安装 Scrapling(需要 Node.js)
./scripts/install_scrapling.sh
或手动安装 Scrapling
npm install -g @scrapinghub/scrapling
使用
基本用法
python
from scripts.webreaderpro import WebReaderPro
reader = WebReaderPro()
result = reader.fetch(https://example.com)
print(result[title])
print(result[content])
高级配置
python
reader = WebReaderPro(
jinaapikey=your-jina-key, # 可选:通过环境变量 JINAAPIKEY 设置
cache_ttl=3600, # 缓存 TTL(秒),默认:3600
quality_threshold=200, # 质量最低字数,默认:200
max_retries=3, # 每层最大重试次数,默认:3
enable_learning=True, # 启用域名学习,默认:True
scrapling_path=/usr/local/bin/scrapling # scrapling 二进制文件路径
)
结果格式
python
{
title: 页面标题,
content: 以 Markdown 格式提取的内容...,
url: https://example.com,
tier_used: jina|scrapling|webfetch,
quality_score: 85,
cached: False,
domainlearnedtier: jina,
extracted_at: 2024-01-01T00:00:00Z
}
环境变量
| 变量 | 描述 | 默认值 |
|---|
| JINAAPIKEY | Jina Reader API 密钥 | 第一层必需 |
| WEBREADERCACHE_DIR |
缓存目录路径 | ~/.openclaw/cache/web-reader-pro/ |
| WEB
READERLEARNING_DB | 学习数据库路径 | ~/.openclaw/data/web-reader-pro/routes.json |
| WEB
READERJINA_QUOTA | Jina 配额限制 | 100000 |
API 参考
WebReaderPro.fetch(url, force_refresh=False)
从 URL 获取并提取内容。
参数:
- - url (str):目标 URL
- force_refresh (bool):如果为 True,则绕过缓存
返回: 包含标题、内容、元数据的字典
WebReaderPro.fetchwithtier(url, preferred_tier)
使用特定层级获取内容(绕过自动选择)。
参数:
- - url (str):目标 URL
- preferred_tier (str):jina、scrapling 或 webfetch
WebReaderPro.getjinastatus()
获取当前 Jina API 配额使用情况。
返回: 包含计数、限制、百分比、警告的字典
WebReaderPro.clear_cache(url=None)
清除特定 URL 或所有 URL 的缓存。
参数:
- - url (str, 可选):要清除的特定 URL,或为 None 清除所有
WebReaderPro.getdomainroutes()
获取已学习的域名到层级的映射。
返回: 域名 -> 首选层级的字典
层级对比
| 层级 | 速度 | JS 渲染 | 最佳适用场景 | 成本 |
|---|
| Jina | 快 | 否 | 静态页面、文章 | API 调用 |
| Scrapling |
中等 | 是 | 单页应用、动态内容 | CPU |
| WebFetch | 最快 | 否 | 简单页面、回退 | 免费 |
许可证
MIT