网站RSS订阅源生成器html2rss-web

简介

什么是 html2rss-web ?

html2rss-web 是一个开源的 Web 应用,可以将任何网站转换为 RSS/JSON 订阅源。它通过自动抓取网页内容,帮助用户将没有 RSS 输出的网站变成可订阅的格式,方便在 RSS 阅读器中阅读。

主要特点

  • 自动抓取:自动解析网页内容,生成 RSS 格式输出
  • 配置化管理:通过 YAML 配置文件定义抓取规则
  • 用户认证:支持多账户 token 认证,确保订阅安全
  • 代理支持:内置 HTTP/HTTPS 代理配置,适应复杂网络环境
  • 健康检查:内置健康检查端点,便于监控服务状态
  • 开源免费:基于 MIT 协议开源,可免费使用和修改

应用场景

  • 订阅无 RSS 的网站:将没有提供 RSS 输出的网站转为可订阅格式
  • 聚合资讯:将多个网站的更新聚合到统一阅读器
  • 监控更新:监控特定页面的内容变化
  • 阅读优化:在 RSS 阅读器中统一阅读网站更新

html2rss-web 是一个轻量级的 RSS 订阅源生成工具,适合需要聚合阅读网页内容的用户。

安装

在群晖上以 Docker 方式安装。

本项目包含两个服务(html2rss-web + browserless),需要使用 docker-compose 部署。

其中:Browserless 的作用,负责处理网页渲染和爬取工作,如果你只需要简单的 HTML 提取可以使用任意 API token

准备

通过 SSH 登录到您的群晖,首先创建配置目录并准备配置文件:

1
2
# 新建文件夹
mkdir -p /volume1/docker/html2rss/config

env.txt

在项目根目录下 /volume1/docker/html2rss/ 创建 env.txt 环境变量文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 启用自动抓取功能
AUTO_SOURCE_ENABLED=true

# 生成你自己的 secret key(使用 openssl rand -hex 32)
HTML2RSS_SECRET_KEY=139e8de20770dd11ceabc97022520475ba1369a00e64a4da2436ac6fe19cd74a

# 健康检查 token(使用 openssl rand -hex 24)
HEALTH_CHECK_TOKEN=be462e488b453506d93f34afb1f79db50618303f5fac01a4

# Browserless API Token(试用token,生产环境需自己注册)
## 1. 访问 Browserless 官网:https://www.browserless.io/
## 2. 创建账户并获取 API Token
BROWSERLESS_IO_API_TOKEN=trial-browserless-token

# Sentry 配置(可选)
SENTRY_DSN=
SENTRY_ENABLE_LOGS=false
  1. production 模式下,若不设置 AUTO_SOURCE_ENABLED=true,页面上会显示 Feed creation is disabled on this instance,也就是不能使用抓取功能

  1. SENTRY_DSN 是 Sentry 错误追踪服务的数据源名称(Data Source Name),用于启用应用的错误监控和日志聚合

feeds.yml

/config 目录下创建 feeds.yml 配置文件,可以配置需要抓取的网站规则,下面的内容只配置了认证

1
2
3
4
5
6
auth:
accounts:
- username: "admin"
token: "你的token"
allowed_urls:
- "*" # Full access

【注意】:token 不能太简单,否则启动时会报错。建议使用 openssl rand -hex 32 来生成

1
2
3
4
html2rss-web    | Weak tokens found for users: admin
html2rss-web | {"timestamp":"2026-05-03T11:41:56+00:00","level":"INFO","service":"html2rss-web","security_event":"cache_lifecycle","details":{"component":"account_manager","event":"build","accounts_count":1}}
html2rss-web | {"timestamp":"2026-05-03T11:41:56+00:00","level":"ERROR","service":"html2rss-web","security_event":"config_validation_failure","details":{"component":"account_tokens","details":"Weak tokens for users: admin"}}
html2rss-web | [1] ! Unable to load application: SystemExit: exit

当现有信息流或自动来源不足时,可以为你想关注的网站编写 YAML 自定义配置,具体配置参考官方文档:https://html2rss.github.io/creating-custom-feeds

docker-compose.yml

在项目根目录下创建 docker-compose.yml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# Docker Compose configuration for html2rss-web
# This is the default configuration - customize as needed

services:
html2rss-web:
image: html2rss/web
container_name: html2rss-web
restart: unless-stopped
ports:
- "4001:4001"
env_file:
- env.txt
environment:
RACK_ENV: production
PORT: 4001
BUILD_TAG: ${BUILD_TAG:-local}
GIT_SHA: ${GIT_SHA:-local}
HTML2RSS_SECRET_KEY: ${HTML2RSS_SECRET_KEY:?set HTML2RSS_SECRET_KEY}
HEALTH_CHECK_TOKEN: ${HEALTH_CHECK_TOKEN:?set HEALTH_CHECK_TOKEN}
SENTRY_DSN: ${SENTRY_DSN:-}
SENTRY_ENABLE_LOGS: ${SENTRY_ENABLE_LOGS:-false}
BROWSERLESS_IO_WEBSOCKET_URL: ws://browserless:4002
BROWSERLESS_IO_API_TOKEN: ${BROWSERLESS_IO_API_TOKEN:?set BROWSERLESS_IO_API_TOKEN}
# HTTP_PROXY: http://192.168.0.206:2081
# HTTPS_PROXY: http://192.168.0.206:2081
# NO_PROXY: localhost,127.0.0.1,::1
# Trial runs use the image's bundled config/feeds.yml.
# Uncomment the block below when you want to replace it with your own file.
volumes:
- type: bind
source: ./config/feeds.yml
target: /app/config/feeds.yml
read_only: true

browserless:
image: "ghcr.io/browserless/chromium"
container_name: html2rss-browserless
restart: unless-stopped
# ports:
# - "4002:4002"
environment:
PORT: 4002
CONCURRENT: 10
TOKEN: ${BROWSERLESS_IO_API_TOKEN:?set BROWSERLESS_IO_API_TOKEN}

启动服务

1
2
3
4
5
# 进入 html2rss 目录
cd /volume1/docker/html2rss

# 一键启动
docker-compose --env-file env.txt up -d

完整的目录结构如下:

1
2
3
4
5
/html2rss/
├── config/
│ └── feeds.yml # 订阅源配置文件
├── env.txt # 环境变量文件
└── docker-compose.yml # 容器编排文件

运行

在浏览器中访问 http://<群晖IP>:4001 即可进入 Web 界面。

搜了一个 HackerNews CN,输入其网址 https://hn.aimaker.dev

第一次使用,还需要输入 /config/feeds.yml 中设置的 token

等待生成预览

对照看了一下,似乎只生成了 问答 部分,看来想要用好 html2rss,还需要深入研究官方文档,完善 feeds.yml 的设置

试了下其他分类,例如 24 小时热榜的地址,

但是从日志看,https://hn.aimaker.dev/category/top 很容易超时导致无结果

将上面获取的地址放入 RSS 阅读器

能获取到标题

注意事项

  1. 代理配置HTTP_PROXYHTTPS_PROXY 环境变量用于代理访问,请根据实际网络环境调整
  2. Token 安全:生产环境请使用强随机 Tokenopenssl rand -hex 32 生成)
  3. Browserless 限制:试用 API token 有并发限制,生产环境建议注册自己的 Browserless 账户
  4. 数据持久化feeds.yml 配置文件需要持久化保存,否则重启后会丢失配置
  5. 端口占用4001 端口可能被占用,请根据实际情况调整

参考文档

html2rss/html2rss-web: Generates RSS feeds of any website & serves to the web
地址:https://github.com/html2rss/html2rss-web

Getting Started | html2rss
地址:https://html2rss.github.io/web-application/getting-started/

browserless/browserless: Deploy headless browsers in Docker. Run on our cloud or bring your own. Free for non-commercial uses.
地址:https://github.com/browserless/browserless