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

8 小时 22 分钟前
 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 好像没区别啊?那我干嘛不去选其他在网络请求方面更适合人类的语言和工具

881 次点击
所在节点    程序员
7 条回复
amlee
7 小时 56 分钟前
架不住别人稳定运行很多年,用户多,会营销。

你自己写的项目会有几个人用呢?我记得还有人专门翻译了一个 rsshub 的 python 版本,也没几个 star

流量是一切,有时候需要放弃从技术角度思考
WildCat
6 小时 28 分钟前
其实开源世界最有意思的规则是,你不爽他可以 fork 做个更好的。
等你做了就知道为什么一个「简陋的前端展示框架」就可以这么火了
kk2syc
6 小时 12 分钟前
中文开源很喜欢造乌托邦项目,并且一群人还以此为荣
botman
1 小时 9 分钟前
rsshub 宣传好,用户多,规则多,配套完善,本来就不是爬虫框架,采集功能弱很正常,不过不碍事,自己写框架,套娃解君愁 (doge
summerLast
8 分钟前
有可能一开始就是一个个人玩具项目,然后宣传不错,star 数目和技术难度不正向关

最近也写了一个玩 ,https://github.com/weekend-project-space/web2rss
nielinjie
3 分钟前
有些东西叫框架,有些叫平台,有些叫生态,有些叫社区。这些方式都可以组织协同,都可以聚合起来完成一些事。但他们的层次是不同的,特点也不同。楼主可以思考一下这个角度。
BeautifulSoap
2 分钟前
@WildCat @amlee

哥们,你们似乎阅读理解的方向错了?我这贴只是来发个牢骚告诉大家给 RSSHub 写源有多坐牢,又不是来质疑 RSSHub 为什么这么火的。
世上火的项目千千万,里面实际代码写成一坨屎的也非常多。每个项目火都有自己的一些原因。莫觉得我就没法理解这种事

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

https://www.v2ex.com/t/1074522

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

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

© 2021 V2EX