作为一个专业领域的技术专家,我需要实时了解全面的信息。市面上的RSS工具要么功能复杂臃肿,要么部分需求不支持,最大的问题是不能在同一个平台浏览所有信息源。经过一番调研,我决定用Kiro写一个轻量级的RSS聚合工具。
令人惊喜的是,一个周末就完成了整个系统,并成功同步了近5000篇文章(标题+链接)。这篇文章将详细介绍整体架构和实现的技术难点,展示Kiro在复杂系统开发中的不凡能力。
先放一些截图吧。
Kiro开发界面,可以看到整个项目完成差不多只用了不到 200 Bonus,实际编码时间估计也就1天时间。

Web首页(没有做任何UI调教,自己凑合能用),支持浏览最新资讯,筛选搜索,采集特定文章。

网站管理页面,主要是指定标题、链接、时间的元素。且支持API方式获取,同样配置好JSON匹配规则。

微信公众号管理页面,公众号支持批量导入,图标转存到了腾讯云,否则防盗链无法展示,可以设置同步页数/同步间隔,同时记录了最后同步时间。

还有一个页面主要记录微信管理员cookie,比较简单就不展示了。另外针对部分文章会采集转换成markdown格式存储到本地,图片也做了处理,文章可以正常展示,后续打算基于有价值的文章做一个垂直领域的RAG。
(以下绝大部分直接用Kiro在项目中生成)
系统需求分析
核心需求
- 多源聚合:支持传统网站RSS、API接口、微信公众号文章
- 统一管理:在同一个平台浏览和管理所有信息源
- 智能处理:自动去重、内容清理、图片处理、HTML转Markdown
- Web界面:提供直观的管理和浏览界面
- 文章同步:将RSS文章同步到标准化的articles表
- 高性能:支持大量文章的存储和检索
技术挑战
- 异构数据源整合:不同平台的数据格式差异巨大
- 微信反爬虫:微信公众号的访问限制和安全机制
- API网站支持:政府部门API接口的调用和数据转换
- 内容处理:HTML转Markdown、图片上传COS、推广内容清理
- 数据一致性:避免重复文章,保证数据完整性
- 性能优化:大量文章的存储和快速检索
- 多管理员机制:微信账号轮换和频率限制处理
系统架构设计
整体架构
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ 数据采集层 │ │ 数据处理层 │ │ 应用服务层 │
├─────────────────┤ ├─────────────────┤ ├─────────────────┤
│ • 网站爬虫 │ │ • 内容清理 │ │ • Web管理界面 │
│ • 微信爬虫 │ │ • 图片处理 │ │ • REST API │
│ • API接口 │ │ • 格式转换 │ │ • 文章同步 │
│ • 多管理员轮换 │ │ • HTML转MD │ │ • 一键采集 │
└─────────────────┘ └─────────────────┘ └─────────────────┘
│ │ │
└───────────────────────┼───────────────────────┘
│
┌─────────────────┐
│ 数据存储层 │
├─────────────────┤
│ • PostgreSQL │
│ • 腾讯云COS │
│ • 双表结构 │
└─────────────────┘
数据流架构
原始数据源 → RSS采集表 → 内容处理 → 标准化文章表 → Web展示
↓ ↓ ↓ ↓ ↓
网站/API rss_articles 图片上传 articles 用户界面
微信公众号 _list HTML转MD 表 管理后台
核心模块
1. 数据库设计 (database.py)
采用PostgreSQL作为主数据库,设计了双表结构:
RSS采集表(4个核心表):
# 网站配置表
rss_websites: 存储网站信息和CSS选择器配置,支持API网站
# 微信管理员表
rss_wechat_admin: 存储微信Token和Cookie认证信息
# 微信公众号表
rss_wechat_account: 存储公众号配置和同步状态
# 文章列表表
rss_articles_list: 统一存储所有来源的文章信息
标准化文章表:
# 文章表
articles: 存储处理后的标准化文章内容
- content_md: Markdown格式内容
- cover_image: 封面图片URL
- image_folder: COS图片目录
- school_ids: 关联学校ID数组
- categories/tags: 智能分类和标签
设计亮点:
- 使用
UNIQUE(link)约束自动去重 - 支持多管理员多公众号的层级管理
type字段区分文章来源,便于统一处理- 双表结构:采集表+标准化表,数据处理更灵活
2. 网站爬虫 (crawler.py)
支持传统HTML网站和现代API接口的统一爬取:
HTML网站爬取:
class NewsCrawler:
def crawl_website(self, website_config):
# 动态CSS选择器解析
# 智能时间格式识别
# 链接补全和规范化
API网站爬取:
def crawl_api_website(self, website_info):
# 自动识别API类型网站
# 武汉城市留言板API集成
# JSON数据结构化处理
技术特点:
- 支持相对链接自动补全
- 多种时间格式自动识别
- 请求失败自动重试机制
- API网站自动识别:通过URL模式和选择器标识
- 统一接口:API网站与HTML网站使用相同命令
3. 微信爬虫 (wechat_crawler.py)
这是系统最复杂的部分,需要突破微信的反爬虫机制:
class WechatCrawler:
def fetch_wechat_articles(self, token, cookie, fakeid, begin=0, count=5):
# 模拟微信公众平台API调用
# 处理分页和偏移量
# 应对频率限制
核心技术:
- 逆向微信公众平台API接口
- Token和Cookie认证机制
- 智能偏移量管理,支持历史文章获取
- 请求频率控制,避免被封
- 多管理员轮换机制:支持指定admin_id参数
- 错误恢复能力:失败时保持原有状态,可安全重试
偏移量管理:
# begin_offset = 0: 只获取第1页最新文章
# begin_offset = 1: 获取前2页文章
# begin_offset = 2: 获取前3页文章
# 爬取完成后自动重置为0
4. 文章处理器 (article_processor.py)
负责将原始HTML转换为标准化的Markdown格式:
class ArticleProcessor:
def html_to_markdown(self, html_content, full_html_content=None):
# HTML内容清理
# 图片下载和上传
# Markdown转换
# 摘要生成
处理流程:
- 内容清理:移除推广链接、广告图片、带超链接的图片
- 图片处理:下载图片并上传到腾讯云COS,保持精确宽度
- 格式转换:HTML转Markdown,保持格式美观
- 摘要生成:智能提取文章摘要
- 封面提取:自动提取第一张有效图片作为封面
- 头尾图片移除:智能识别并移除文章开头和结尾的装饰性图片
智能图片处理:
- 过滤GIF动图,提升加载速度
- 移除微信推广图片和无效链接
- 基于文档流的智能边界检测
- 精确的像素级宽度保持
5. 文章同步器 (article_syncer.py)
将RSS文章同步到标准化的articles表:
class ArticleSyncer:
def sync_article_to_articles_table(self, article_id):
# 获取完整文章内容
# 处理HTML转Markdown
# 生成分类和标签
# 同步到articles表
同步功能:
- 支持单篇文章同步和批量同步
- 支持按公众号同步所有文章
- 智能分类和标签生成
- 学校关联:自动关联公众号的学校ID
- 去重检查:基于source_url避免重复同步
智能分类系统:
def _generate_categories(self, title, account_name, school_id):
# 根据标题关键词自动分类
# 入学指导、官方通知、校园活动、教学信息等
技术难点攻克
1. 微信反爬虫机制突破
微信公众号的爬取是整个系统最大的技术挑战:
问题分析:
- 需要有效的Token和Cookie认证
- 存在访问频率限制(freq control)
- 部分文章链接包含安全验证参数
- 管理员账号可能失效
解决方案:
# 多管理员轮换机制
def crawl_wechat_accounts(self, account_ids=None, admin_id=None):
# 支持指定管理员ID,实现账号轮换
if admin_id:
admin_info = db.get_wechat_admin_by_id(admin_id)
account['token'] = admin_info['token']
account['cookie'] = admin_info['cookie']
# 错误恢复机制
if articles is None:
logger.error("爬取失败,跳过更新offset和时间")
continue # 保持原有状态不变
创新点:
- 实现了多管理员账号轮换,提高成功率
- 智能偏移量管理,支持获取历史文章
- 错误恢复能力:失败时保持原有状态,可安全重试
- 频率限制处理:遇到限制时自动跳过,不影响其他账号
2. 图片处理和存储优化
文章中的图片处理是另一个技术难点:
挑战:
- 图片来源多样,格式不统一
- 需要过滤推广图片和无效图片
- 大量图片的存储和CDN加速
- 头尾装饰性图片影响阅读体验
解决方案:
def clean_promotional_content(self, soup):
# 移除带超链接的推广图片
self._remove_linked_images(soup)
# 过滤GIF动图
# 移除头尾推广内容
def _remove_head_tail_images(self, markdown_content):
# 基于文档流的智能边界检测
# 移除开头和结尾的纯图片行
# 保留文字内容中的相关图片
技术亮点:
- 智能识别并移除推广图片
- 自动过滤GIF动图,提升加载速度
- 集成腾讯云COS,实现图片CDN加速
- 保持原始图片宽度比例,确保显示效果
- 智能边界检测:基于文档流而非DOM结构
- 精确图片分类:区分装饰性图片和内容图片
3. 数据一致性和性能优化
去重机制:
INSERT INTO rss_articles_list (...)
VALUES (...)
ON CONFLICT (link) DO NOTHING
RETURNING id;
性能优化:
- 使用PostgreSQL的UNIQUE约束实现高效去重
- 批量插入减少数据库连接开销
- 索引优化,支持快速检索
4. API网站集成创新
系统创新性地支持了API类型的网站,实现了传统爬虫无法达到的效果:
技术实现:
def is_api_website(self, website_info):
# 自动识别API网站
return website_info.get('selector_title') == 'API'
def crawl_liuyan_api(self, website_info):
# 武汉城市留言板API集成
# JSON数据结构化处理
# 自动构造文章详情链接
创新点:
- 统一接口:API网站与HTML网站使用相同命令
- 自动识别:通过选择器标识自动路由到API处理
- 高效稳定:API调用比HTML解析更快更稳定
- 易于扩展:框架化设计,容易添加新的API网站
5. Web界面的用户体验
使用Flask构建了直观的管理界面:
功能特色:
- 统一的文章浏览界面,支持按来源筛选
- 可视化的网站和公众号管理
- 实时的同步状态监控
- 一键文章采集功能:直接从RSS表同步到articles表
- 采集状态显示:实时显示文章是否已采集
Kiro的不凡能力体现
1. 快速原型开发
使用Kiro,我能够在2天内完成整个系统的开发:
- 第一天:完成核心架构设计和数据库建模
- 第二天:实现爬虫逻辑和Web界面
2. 智能代码生成
Kiro在以下方面表现出色:
- 数据库操作:自动生成CRUD操作代码
- 表单处理:快速生成Flask-WTF表单类
- 错误处理:智能添加异常处理逻辑
3. 架构优化建议
Kiro不仅能写代码,还能提供架构优化建议:
- 建议使用连接池优化数据库性能
- 推荐异步处理提升爬虫效率
- 提出缓存策略减少重复计算
4. 调试和问题解决
在开发过程中,Kiro帮助快速定位和解决问题:
- 微信API参数调试
- 图片处理逻辑优化
- 数据库查询性能调优
系统成果展示
数据规模
- 同步文章:近5000篇文章(仅标题和链接)
- 数据源:20+网站,200+微信公众号,API接口
- 图片处理:2000+张图片上传到COS
- 去重效果:自动过滤重复文章500+篇
- 文章同步:104篇微信文章中100篇成功同步内容
性能表现
- 爬取速度:平均每分钟处理50篇文章
- 成功率:网站爬取成功率95%+,微信爬取成功率90%+,API接口成功率99%+
- 响应时间:Web界面平均响应时间<200ms
- 图片处理:平均每张图片处理时间<3秒
功能完整性
- ✅ 多源数据聚合(网站+API+微信)
- ✅ 智能内容处理(HTML转MD)
- ✅ 图片CDN存储(腾讯云COS)
- ✅ Web管理界面(Flask+Bootstrap)
- ✅ 自动去重机制(数据库约束)
- ✅ 错误恢复能力(状态保持)
- ✅ 多管理员轮换(账号容错)
- ✅ 一键文章采集(RSS→Articles)
- ✅ 智能分类标签(自动生成)
- ✅ 偏移量管理(历史文章)
技术栈总结
后端技术:
- Python 3.9+
- Flask Web框架
- PostgreSQL数据库
- BeautifulSoup HTML解析
- Requests HTTP客户端
前端技术:
- Bootstrap 4 UI框架
- Jinja2模板引擎
- JavaScript交互逻辑
第三方服务:
- 腾讯云COS对象存储
- 微信公众平台API
开发工具:
- Kiro AI编程助手
- Git版本控制
总结与展望
这个RSS聚合系统的成功开发,充分展示了Kiro在复杂系统开发中的强大能力。从架构设计到代码实现,从问题调试到性能优化,Kiro都提供了专业级的支持。
Kiro的优势:
- 快速开发:大幅缩短开发周期
- 代码质量:生成的代码结构清晰,易于维护
- 技术深度:能够处理复杂的技术挑战
- 学习能力:根据项目需求不断优化建议
未来规划:
- 支持更多数据源(小红书,抖音)
- 增加AI总结日报、周报邮件发送
- 实现分布式爬虫架构
- 添加移动端支持
- 针对采集可信内容基于AI做RAG知识库
完整的使用示例
基本爬取命令
# 爬取所有活跃网站
python main.py website
# 爬取指定微信公众号,使用管理员ID=1
python main.py wechat 56 1
# 爬取API网站
python main.py website 5
文章同步命令
# 查看同步状态
python manage_article_sync.py status
# 同步指定文章到articles表
python manage_article_sync.py sync-articles 1007 1008
# 同步整个公众号的文章
python manage_article_sync.py sync-account 22 --limit 10
运行web服务
python web_app.py
这个项目不仅解决了我的实际需求,更重要的是验证了Kiro作为AI编程助手的巨大潜力。从复杂的微信反爬虫机制到智能的图片处理算法,从API接口集成到双表数据架构,Kiro都展现出了专业级的开发能力。在AI辅助开发的时代,像Kiro这样的工具将成为开发者不可或缺的伙伴。