mcpField
E
eceee-news-fulltext-fetch

eceee-news-fulltext-fetch

github.com/tiangong-ai数据与数据库1141 次安装1 周前更新
代码仓库

关于 eceee-news-fulltext-fetch

用于从 eceee 新闻归档发现文章链接、提取正文并存入 SQLite 的技能,适合需要增量采集和本地重试队列的场景。它保留条目元数据,并通过状态和重试信息管理正文提取。

主要功能

  1. 01发现新闻文章链接
  2. 02增量抓取并提取正文
  3. 03SQLite 保存条目与正文
  4. 04失败记录及重试退避
  5. 05按条目 ID 或 URL 抓取

适用场景

  1. 01同步 eceee 新闻归档全文
  2. 02仅更新新闻链接目录
  3. 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 队列,用于发现、提取和重试。

工作流

  1. 初始化数据库。
export ECEEE_NEWS_DB_PATH="/absolute/path/to/eceee_news.db"
python3 scripts/fulltext_fetch.py init-db --db "$ECEEE_NEWS_DB_PATH"
  1. 增量发现链接并抓取全文。
python3 scripts/fulltext_fetch.py sync \
  --db "$ECEEE_NEWS_DB_PATH" \
  --index-url "https://www.eceee.org/all-news/" \
  --limit 50 \
  --min-chars 180
  1. 仅发现链接(刷新 URL 目录,不抓取正文)。
python3 scripts/fulltext_fetch.py sync \
  --db "$ECEEE_NEWS_DB_PATH" \
  --discover-only
  1. 按需抓取单个条目。
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/"
  1. 检查存储的状态。
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_at
    • discovered_at、last_seen_at
  • entry_content 表存储提取结果(每个 entry_id 对应一行):
    • source_url、final_url、http_status
    • extractor(trafilatura、html-parser 或 none)
    • content_text、content_hash、content_length
    • status(ready 或 failed)
    • 重试字段和时间戳

提取与更新规则

  • 发现来源为 https://www.eceee.org/all-news/,从 /all-news/news/ 下提取带有 newslink 类的锚点标签。
  • 全文提取使用文章主体内容区域(mainContentColumn),并移除相关新闻和分享区块。
  • 提取路径:
    1. 使用 trafilatura(如果已安装且未禁用)
    2. 回退到内置 HTML 解析器
  • 按 entry_id 执行 Upsert:
    • 成功:设置为 ready,写入文本、哈希和长度,并重置重试计数器。
    • 失败,但已有 ready 内容:保留旧内容,更新错误和重试元数据。
    • 失败且没有可用的 ready 内容:设置为 failed,增加重试次数,并设置 next_retry_at。

可配置参数

  • --db
  • ECEEE_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.md
  • references/fetch-rules.md

资源文件

  • assets/config.example.json

脚本

  • scripts/fulltext_fetch.py

评论

支持 Markdown