关于 eceee-news-fulltext-fetch
用于从 eceee 新闻归档发现文章链接、提取正文并存入 SQLite 的技能,适合需要增量采集和本地重试队列的场景。它保留条目元数据,并通过状态和重试信息管理正文提取。
主要功能
- 01发现新闻文章链接
- 02增量抓取并提取正文
- 03SQLite 保存条目与正文
- 04失败记录及重试退避
- 05按条目 ID 或 URL 抓取
适用场景
- 01同步 eceee 新闻归档全文
- 02仅更新新闻链接目录
- 03按需重新抓取单篇文章
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ tiangong-ai/ agent-skills --skill eceee-news-fulltext-fetch安装后在 Claude Code 中输入/eceee-news-fulltext-fetch确认已加载。
详细介绍
eceee 新闻全文抓取
核心目标
- 从
https://www.eceee.org/all-news/发现新闻文章 URL。 - 将发现的条目元数据持久化到 SQLite。
- 从每个条目页面抓取并提取文章正文。
- 将状态和文本持久化到配套表(
entry_content),并支持可安全重试的更新。
触发条件
- 收到从 eceee 新闻存档页面提取全文的请求。
- 收到对 eceee 新闻链接执行增量全文同步的请求。
- 需要一个具备弹性的本地 SQLite 队列,用于发现、提取和重试。
工作流
- 初始化数据库。
export ECEEE_NEWS_DB_PATH="/absolute/path/to/eceee_news.db"
python3 scripts/fulltext_fetch.py init-db --db "$ECEEE_NEWS_DB_PATH"
- 增量发现链接并抓取全文。
python3 scripts/fulltext_fetch.py sync \
--db "$ECEEE_NEWS_DB_PATH" \
--index-url "https://www.eceee.org/all-news/" \
--limit 50 \
--min-chars 180
- 仅发现链接(刷新 URL 目录,不抓取正文)。
python3 scripts/fulltext_fetch.py sync \
--db "$ECEEE_NEWS_DB_PATH" \
--discover-only
- 按需抓取单个条目。
python3 scripts/fulltext_fetch.py fetch-entry \
--db "$ECEEE_NEWS_DB_PATH" \
--entry-id 123
或按 URL 抓取:
python3 scripts/fulltext_fetch.py fetch-entry \
--db "$ECEEE_NEWS_DB_PATH" \
--url "https://www.eceee.org/all-news/news/example-slug/"
- 检查存储的状态。
python3 scripts/fulltext_fetch.py list-entries --db "$ECEEE_NEWS_DB_PATH" --limit 100
python3 scripts/fulltext_fetch.py list-content --db "$ECEEE_NEWS_DB_PATH" --status ready --limit 100
数据约定
entries表存储发现的元数据:url、title、published_atdiscovered_at、last_seen_at
entry_content表存储提取结果(每个entry_id对应一行):source_url、final_url、http_statusextractor(trafilatura、html-parser或none)content_text、content_hash、content_lengthstatus(ready或failed)- 重试字段和时间戳
提取与更新规则
- 发现来源为
https://www.eceee.org/all-news/,从/all-news/news/下提取带有newslink类的锚点标签。 - 全文提取使用文章主体内容区域(
mainContentColumn),并移除相关新闻和分享区块。 - 提取路径:
- 使用
trafilatura(如果已安装且未禁用) - 回退到内置 HTML 解析器
- 使用
- 按
entry_id执行 Upsert:- 成功:设置为
ready,写入文本、哈希和长度,并重置重试计数器。 - 失败,但已有
ready内容:保留旧内容,更新错误和重试元数据。 - 失败且没有可用的
ready内容:设置为failed,增加重试次数,并设置next_retry_at。
- 成功:设置为
可配置参数
--dbECEEE_NEWS_DB_PATH--index-url--discover-only--limit--force--only-failed--since-date--refetch-days--oldest-first--timeout--max-bytes--min-chars--max-retries--retry-backoff-minutes--user-agent--disable-trafilatura--fail-on-errors
错误处理
- 索引抓取或解析失败时会返回可执行的错误信息。
- HTTP、网络或内容类型错误会按条目记录,不会中断整个同步批次。
- 提取出的文本过短(
< --min-chars)时会视为失败,以避免正文质量过低。 - 重试队列由
max_retries和指数退避控制。
参考资料
references/schema.mdreferences/fetch-rules.md
资源文件
assets/config.example.json
脚本
scripts/fulltext_fetch.py
评论
支持 Markdown