finviz-crawler

持续抓取Finviz财经新闻,本地存储并支持查询与AI摘要。

已扫描高权限提醒
适合谁
量化交易者、财经内容创作者
不适合谁
无编程基础的普通用户、需要实时API接口的用户
国内可用性
需网络配置。可能需要网络配置或第三方服务可访问。
安装难度
新手友好(★☆☆)。基于终端操作、依赖、API Key 和本地环境要求的初步判断。

安装与下载

openclaw skills install @camopel/finviz-crawler

Skill 说明

命令、参数、文件名以原文为准

finviz-crawler

为什么使用此技能?

📰 构建属于你自己的金融新闻数据库 —— 多数金融类技能仅提供一次性 API 查询。本技能持续运行,自动归档 Finviz 上的每一条新闻标题与文章内容。可随时查询历史数据,无 API 调用限制,不丢失任何信息。

🆓 无需 API 密钥,无需订阅 —— 直接通过 Crawl4AI + RSS 抓取 finviz.com 内容。自动提取 Bloomberg、Reuters、Yahoo Finance、CNBC 等来源的文章,完全免费。

🤖 专为 AI 摘要设计 —— 查询工具输出结构清晰的文本或 JSON,适合 LLM 进行摘要处理。搭配 OpenClaw 定时任务,可实现每日晨间简报、晚间总结或每周投资摘要的自动化生成。

💾 自动清理机制 —— 可配置过期策略,自动删除数据库和磁盘中的旧文章。设置 --expiry-days 30 可保留一个月的历史数据,设为 0 则永久保存。

🔄 守护进程架构 —— 作为后台服务运行,随 OpenClaw 启动/停止。安装后无需手动干预。支持 systemd(Linux)和 launchd(macOS)。

安装

python3 scripts/install.py

兼容 macOS、Linux 和 Windows。自动安装 Python 依赖包(crawl4aifeedparser),配置 Playwright 浏览器,创建数据目录,并进行完整性验证。

手动安装

pip install crawl4ai feedparser
crawl4ai-setup  # 或:python -m playwright install chromium

使用方法

运行爬虫

# 默认:~/workspace/finviz/,7天过期
python3 scripts/finviz_crawler.py

# 自定义路径与参数
python3 scripts/finviz_crawler.py --db /path/to/finviz.db --articles-dir /path/to/articles/

# 保留30天的文章
python3 scripts/finviz_crawler.py --expiry-days 30

# 不自动删除(永久保存)
python3 scripts/finviz_crawler.py --expiry-days 0

# 自定义抓取间隔(默认:300秒)
python3 scripts/finviz_crawler.py --sleep 600

查询文章

# 最近24小时的新闻标题
python3 scripts/finviz_query.py --hours 24

# 仅返回标题(简洁格式,适合 LLM 摘要)
python3 scripts/finviz_query.py --hours 12 --titles-only

# 包含完整文章内容
python3 scripts/finviz_query.py --hours 12 --with-content

# 列出已下载的文章及其内容状态
python3 scripts/finviz_query.py --list-articles --hours 24

# 查看数据库统计信息
python3 scripts/finviz_query.py --stats

管理股票代码

# 列出所有跟踪的股票代码
python3 scripts/finviz_query.py --list-tickers

# 添加单个股票代码(自动根据代码生成关键词)
python3 scripts/finviz_query.py --add-ticker NVDA

# 自定义关键词
python3 scripts/finviz_query.py --add-ticker "NVDA:nvidia,jensen huang"

# 批量添加多个股票代码
python3 scripts/finviz_query.py --add-ticker NVDA TSLA AAPL
python3 scripts/finviz_query.py --add-ticker "NVDA:nvidia,jensen" "TSLA:tesla,elon musk"

# 批量移除股票代码
python3 scripts/finviz_query.py --remove-ticker NVDA TSLA

# 指定自定义数据库路径
python3 scripts/finviz_query.py --list-tickers --db /path/to/finviz.db

股票代码存储在 finviz.db 数据库的 tickers 表中,爬虫每次运行时会读取该表以确定需要抓取哪些股票页面。

配置项

设置命令行参数环境变量默认值
数据库路径--db~/workspace/finviz/finviz.db
文章存储目录--articles-dir~/workspace/finviz/articles/
抓取间隔--sleep300(5分钟)
文章过期天数--expiry-daysFINVIZ_EXPIRY_DAYS7
时区FINVIZ_TZTZ系统默认

💬 聊天命令(OpenClaw 代理)

安装本技能后,代理将识别 /finviz 为快捷指令:

命令动作
/finviz list显示已跟踪的股票代码
/finviz add NVDA, TSLA添加股票代码进行跟踪
/finviz remove NVDA移除某个股票代码
/finviz stats显示文章与股票代码数量统计
/finviz help显示可用命令列表

代理内部通过 finviz_query.py CLI 执行这些操作。

📱 PrivateApp 仪表板

配套的移动端仪表板可在 [PrivateApp](https://github.com/camopel/PrivateApp) 中获取 —— 一个部署于家庭服务器上的个人 PWA 仪表板。

Finviz 应用 提供:

  • 支持时间范围筛选(12小时 / 24小时 / 一周)的新闻浏览功能
  • 按股票代码过滤新闻
  • 按需调用 LLM 生成摘要

安装 PrivateApp 后,Finviz 仪表板即内置其中,无需额外配置。

架构设计

爬虫守护进程finviz_crawler.py):

  • 每 5 分钟抓取一次 finviz.com/news.ashx 的新闻标题
  • 通过 Crawl4AI(Playwright)或 RSS 获取文章正文(适用于付费墙站点)
  • 自动识别并过滤机器人或垃圾内容
  • 按域名设置速率限制,轮换 User-Agent
  • 使用 SHA-256 标题哈希去重
  • 可配置过期策略自动清理旧文章
  • 接收 SIGTERM/SIGINT 信号后正常退出

查询工具finviz_query.py):

  • 仅读取 SQLite 数据库(无 HTTP 请求,仅使用标准库)
  • 支持按时间窗口筛选,可导出标题或全文
  • 专为 LLM 摘要流程设计

作为服务运行(可选)

systemd(Linux)

[Unit]
Description=Finviz News Crawler

[Service]
ExecStart=python3 /path/to/scripts/finviz_crawler.py --expiry-days 30
Restart=on-failure
RestartSec=30

[Install]
WantedBy=default.target

launchd(macOS)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key><string>com.finviz.crawler</string>
    <key>ProgramArguments</key>
    <array>
        <string>python3</string>
        <string>/path/to/scripts/finviz_crawler.py</string>
        <string>--expiry-days</string>
        <string>30</string>
    </array>
    <key>RunAtLoad</key><true/>
    <key>KeepAlive</key><true/>
</dict>
</plist>

数据布局

~/workspace/finviz/
├── finviz.db          # SQLite:文章 + 股票代码(单个数据库)
├── articles/          # 文章全文以 .md 文件形式存储
│   ├── market/        # 市场综合新闻标题
│   ├── nvda/          # 单个股票的文章
│   └── tsla/
└── summaries/         # LLM 摘要缓存(.json 文件)

定时任务集成

与 OpenClaw 定时任务配合,实现自动化摘要推送:

计划:0 6 * * * (每日早上 6 点执行)
任务:查询过去 24 小时内容 → 使用 LLM 生成摘要 → 推送至 Matrix/Telegram/Discord
C
@camopel

已收录 1 个 Skill

相关推荐