为了帮助你为这些政府网站创建自定义 RSSHub 路由,以下是分步指南和示例代码模板。由于你已挂载自定义路由目录,我们将通过以下步骤实现:
一、基础准备
在 NAS 的./rsshub/lib/routes 目录下新建文件夹 government
每个分类需要创建两个文件:
radar.js (域名匹配规则)
具体路由文件(如 cqgov.js )
二、重庆政府示例(政策文件库)
步骤 1:分析页面结构
打开
http://www.cq.gov.cn/zwgk/zfxxgkml/szfwj/ 按 F12 查看元素结构:
列表项通常位于 ul.list li 选择器
标题在<a>标签内
日期在
span.date步骤 2:创建路由规则
新建 ./rsshub/lib/routes/government/radar.js 内容如下:
javascript
复制
module.exports = {
'
cq.gov.cn': {
_name: '重庆市政府',
'www': [
{
title: '政策文件库',
docs: 'government/
cqgov.md',
source: ['/zwgk/zfxxgkml/szfwj'],
target: '/cq/gov/szfwj',
},
// 其他分类可在此追加
],
},
'
gov.cn': {
_name: '中国政府网',
'www': [
{
title: '最新政策',
docs: 'government/
central.md',
source: ['/zhengce/zuixin'],
target: '/gov/zhengce/zuixin',
},
// 其他分类可在此追加
],
},
};
步骤 3:编写抓取逻辑
新建 ./rsshub/lib/routes/government/cqgov.js 内容如下:
javascript
复制
const got = require('@/utils/got');
const cheerio = require('cheerio');
const { parseDate } = require('@/utils/parse-date');
module.exports = async (ctx) => {
const baseUrl = '
http://www.cq.gov.cn/zwgk/zfxxgkml/szfwj/'; const { data: response } = await got(baseUrl);
const $ = cheerio.load(response);
const list = $('ul.list li')
.toArray()
.map((item) => {
const $item = $(item);
const $a = $item.find('a');
return {
title: $a.text(),
link: new URL($a.attr('href'), baseUrl).href,
pubDate: parseDate($item.find('
span.date').text(), 'YYYY-MM-DD'),
};
});
ctx.state.data = {
title: '重庆市政府文件',
link: baseUrl,
item: list,
};
};
三、中国政府网示例(最新政策)
步骤 1:分析页面结构
打开
https://www.gov.cn/zhengce/zuixin/ 查看:
文章列表通常在 ul.list 或 div.news_box 中
注意有些页面可能需要 JS 渲染(已配置 Browserless )
步骤 2:编写抓取逻辑
新建 ./rsshub/lib/routes/government/central.js:
javascript
复制
const got = require('@/utils/got');
const cheerio = require('cheerio');
module.exports = async (ctx) => {
const baseUrl = '
https://www.gov.cn/zhengce/zuixin/'; const { data: response } = await got(baseUrl);
const $ = cheerio.load(response);
const list = $('div.news_box div.list li')
.toArray()
.map((item) => {
const $item = $(item);
const $a = $item.find('a');
return {
title: $a.text(),
link: new URL($a.attr('href'), baseUrl).href,
pubDate: $item.find('
span.date').text().trim(),
};
});
ctx.state.data = {
title: '最新政策 - 中国政府网',
link: baseUrl,
item: list,
};
};
四、部署与测试
重启 RSSHub 容器使新路由生效:
bash
复制
docker-compose restart rsshub
访问测试:
重庆政策文件: http://你的 NAS 地址:1200/cq/gov/szfwj
中央最新政策: http://你的 NAS 地址:1200/gov/zhengce/zuixin
五、常见问题处理
动态加载内容:在路由文件中添加 require('./utils/puppeteer')使用浏览器渲染
分页支持:使用 for 循环遍历页面
特殊编码:添加 response.data = iconv.decode(response.data, 'gb2312')处理 GBK 编码
六、扩展建议
建议为每个网站单独建立路由文件
使用 RSSHub 官方文档作为参考:
https://docs.rsshub.app/guide/复杂页面建议使用 Postman 测试选择器
如需完整实现所有列出的 URL 路由,建议按此模式逐个分析页面结构后编写对应规则。如果遇到具体页面的解析问题,可以提供页面 HTML 片段,我可协助调试选择器。