Digitalgk

Digitalgk

V2EX 第 655335 号会员,加入于 2023-10-19 10:44:59 +08:00
15 S 62 B
Digitalgk 最近回复了
6 天前
回复了 ZakaryTime 创建的主题 程序员 求会 RSShub 定制路由的大佬帮帮忙
@ZakaryTime chatGPT 的事儿 哈哈
6 天前
回复了 ZakaryTime 创建的主题 程序员 求会 RSShub 定制路由的大佬帮帮忙
为了帮助你为这些政府网站创建自定义 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 片段,我可协助调试选择器。
9 天前
回复了 BeijingBaby 创建的主题 生活 记一次结石发作经历
记得多吃带汤的 馄饨之类 干 2 大碗 躺着别动 忍着慢慢排
我的畅网 J4125 可以插 sim 卡
@Digitalgk 卧槽 没看清 什么 最后一位 255 ?
很简单啊 光猫直连电脑 手动填个同网段的 ip 进光猫改就行了
双 wan 路由器 做个策略即可 用 softether
春节快乐。
身为洛阳本地土著 从这两天开始 基本开车不去市区了 各大商圈基本开车没法去 人巨多
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   6150 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 16ms · UTC 02:20 · PVG 10:20 · LAX 18:20 · JFK 21:20
Developed with CodeLauncher
♥ Do have faith in what you're doing.