给 RSSHub 写第三方源写的绷不住了,上来吐槽下

141 天前
 BeautifulSoap

看我这大晚上发帖,你们应该能想到我现在的心情,纯粹牢骚一下。也许你会说发牢骚干嘛不去 RSSHub repo 下。额,主要还是因为我已经放弃了给它写源了,所以也不打算去 repo 下多引发争议。

事情经过:

有个喜欢的歌手的网站没有 rss ,rsshub 也没有相应的源,于是看了下 rsshub 的开发文档开始写源,想着写好了我也能提个 pr

结果写到后来直接把我写得绷不住了,最大的问题:rsshub 作为专门将网页解析成 rss 的项目,实际上本质就是个大型的爬虫。而作为一个爬虫,请求各种网站的时候你肯定需要有一点反爬对策的。比如我期待就是 RSSHub 会提供一些网络请求的接口如 .get() .post() 来给我们调用,底层一些简单的杂活累活就由 RSSHub 来负责,我只需要提供相应请求信息之类的,然后对结果进行解析 or 处理更复杂的页面逻辑 or 反爬逻辑

结果在请求网页的时候,RSSHub 几乎没有提供任何工具。它让开发者直接用 ofetch 这个包跳过 RSSHub 直接去请求网页。网络请求的所有细节和繁杂工作全都要每个源作者自己去处理。

最让我难受非 cookie 莫属。所有涉及到 cookie 的操作全都需要第三方源作者自己来处理。而很多网站反爬又很依赖 cookie 。ofetch 作为一个网络请求包并不具备任何 cookie 相关功能,一切都要你手动处理。你需要提取出返回头里的 Set-Cookie 信息,然后解析出来,然后手动放到下一次请求头里,下次如果返回值 Set-Cookie 你又要手动更新处理等等。关键是 js 里 cookie 解析,CookieJar 之类包又极其难用。体验极其坐牢

你也许会说,处理这么麻烦你不会写点 helper 函数?是的,其他源作者也是这么想的,所以导致现在 RSSHub 项目数不清的源里,非常多作者都各自独立造了 cookie 轮子或者单独用自己的方式在用 cookie

除此之外网络请求没有比较统一的资源池,要爬取一个列表中所有文章信息,官方文档直接让你 Promise.all([get(), get(), get()]) 暴力请求,也没有任何针对网站请求速率进行控制的相关工具。所有东西全要自己实现。我越是写到后来越觉得奇怪,我感觉 RSSHub 怎么看着就是个非常简陋的前端展示框架啊。整个系统中最麻烦复杂的网络请求部分全都一股脑地扔给了源开发者,RSSHub 本身地工作实际上就是调用源然后渲染成 rss 这么简单

那么这就有个问题了,RSSHub 写源花费的这功夫和我直接新建个项目起个简单服务器然后直接调用 http clinet 然后整形成 rss 好像没区别啊?那我干嘛不去选其他在网络请求方面更适合人类的语言和工具

5613 次点击
所在节点    程序员
37 条回复
lisxour
140 天前
@WildCat #2 没用的,社区驱动大多都活不久,或者一堆源失效
goodokgood1
140 天前
@mway 确实,号称是下一代的阅读器,我激活了一个试用了几天,相比较传统的 rss 阅读器没发现什么特别之处
Tink
140 天前
他这个不算是爬虫框架,这些活可以让 ai 帮忙干
BeautifulSoap
140 天前
@DIYgods 作者你好,我不太理解网络请求部分的复杂度该如何通过 ci 进行简化。如果可以的话你能提供相关讨论或构想的链接吗?

至于参与项目,说真的我不太确定 RSSHub 到底对项目变化的接受程度到底如何。
我虽然写第三方源(也就是 router )才一天不到,但已经发现了非常多缺失的功能,如经由 RSSHub 接管的网络请求接口,完全自动无感的 cookie 处理,对请求速率之类进行控制的池,cookie 的持久化,数据的持久化之类。这些功能并不是特别复杂的功能,但我不确定我真写了代码后这些改变能否被 RSSHub 接受
GrayXu
140 天前
@nielinjie #6 +1 ,社区是个更好的定义。而且实话不同开发者做的不同网站,你要给这些工具做一套抽象出来也挺难的,自己搓轮子其实是个更实际的方案。或者分层来做?
momocraft
140 天前
cookie 和反反爬都是体力劳动居多 你之前的人和你一样不想做 or 做不好而已
404www
140 天前
为什么有人一直说在营销呢?我感觉还好吧,要是不宣传(虽然我估计作者没怎么宣传过)早就消失在 404 里了,总不能什么东西火或者多人用就是营销吧?那微信的营销不是更厉害,怎么不见大规模弃用微信
bli22ard
140 天前
这么说的话,和这个比较像的项目,就是青龙面板,面板核心功能就是定时任务,它可以说连脚本开发文档都没有,但是热度同样很高。我之前发帖,https://tanronggui.xyz/t/1016931
mark2025
140 天前
如果 RSSHub 提供了高级的反爬虫接口,你觉得不会被黑产的盯上?
jackmod
140 天前
N 年前码过几个路由,前几天发现有几个寄了好几个月了,没人修就是没人订阅,以后再说。
自用的实例是自建的,私有机器上搭配 freshrss 用。
BeautifulSoap
139 天前
@mark2025 有点搞笑,我头一次听说网络请求帮忙自动处理 cookie ,给个速率控制就能被黑产盯上的
mark2025
139 天前
@BeautifulSoap 这不是你原文吗?

==========
结果写到后来直接把我写得绷不住了,最大的问题:rsshub 作为专门将网页解析成 rss 的项目,实际上本质就是个大型的爬虫。而作为一个爬虫,请求各种网站的时候你肯定需要有一点反爬对策的。比如我期待就是 RSSHub 会提供一些网络请求的接口如 .get() .post() 来给我们调用,底层一些简单的杂活累活就由 RSSHub 来负责,我只需要提供相应请求信息之类的,然后对结果进行解析 or 处理更复杂的页面逻辑 or 反爬逻辑
===========
cabudon
139 天前
rsshub 啥用没有,我都不知道是干什么的,那个作者最近又搞了 follow ,玩饥饿营销。

rss 不都是自己搭服务器爬吗?然后选几个通用 rss 接口规则,rsshub 体现在哪,不是很懂
ztm0929
139 天前
@cabudon RSSHub 作为我这类技术小白理解并实践 RSS 非常有帮助。从名字就可以看出来它的愿景是社区驱动(虽然不会有 GitHub/P**nHub 那样的体量)。目前来看似乎并不适合你们这类技术大佬。

实际上我自己也弃用了(确实“不完美”),吐槽/讨厌某个项目也是每个人的自由,但是这样轻描淡写地评价还是挺伤人心的。
BeautifulSoap
139 天前
@ztm0929 兄弟,我这贴是在谈给 RSSHub 开发源的问题,RSSHub 的源你以为都是凭空长出来的?都是各种开发者自己贡献写的,你作为终端用户当然看不懂我这贴在写什么东西。毕竟终端用户只管用就行了,自然不会去在乎后面开发源的人要受多少苦

@mark2025 所以你到底是怎么把这段话和黑产联系起来的?不好意思你的思维太过跳跃我有点没法理解。能解释下吗
ztm0929
139 天前
@BeautifulSoap #2 #24 #17 “非常期待像你们这样的开发者去完善更新 RSS 世界(不一定只是这个项目)” 这是我所理解的开源世界。

作为开源学习者,我不认为我是只伸手不建设的 User…

作为爬虫学习者,我能感受到在这样“糟糕”的基础上施不开拳脚(几乎重复造轮子)的痛苦郁闷。

最后,如果这样吐槽能让你好受一点,也不错😄
mark2025
138 天前
@BeautifulSoap
========
rsshub ……本质是个爬虫 …… 反爬对策的……RSSHub 提供网接口如 .get() .post() 来给我们调用
===================
我没用过 rsshub ,就上面的信息我可能不正确的理解:
1. rsshub 是个爬虫
2. 你期望 rsshub 能提供接口来,底层实现反爬策略
3. 如果 rsshub 实现这种接口,那么就有人会利用这些接口做不一定合法的事情。比如爬商品价格什么的

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://tanronggui.xyz/t/1074522

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX