给 RSSHub 写第三方源写的绷不住了,上来吐槽下 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
BeautifulSoap
V2EX    程序员

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

  •  
  •   BeautifulSoap 2024-09-21 02:36:41 +08:00 7021 次点击
    这是一个创建于 453 天前的主题,其中的信息可能已经有所发展或是发生改变。

    看我这大晚上发帖,你们应该能想到我现在的心情,纯粹牢骚一下。也许你会说发牢骚干嘛不去 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 好像没区别啊?那我干嘛不去选其他在网络请求方面更适合人类的语言和工具

    37 条回复    2024-09-23 16:06:38 +08:00
    amlee
        1
    amlee  
       2024-09-21 03:02:07 +08:00   6
    架不住别人稳定运行很多年,用户多,会营销。

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

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

    最近也写了一个玩 ,https://github.com/weekend-project-space/web2rss
    nielinjie
        6
    nielinjie  
       2024-09-21 10:55:11 +08:00   1
    有些东西叫框架,有些叫平台,有些叫生态,有些叫社区。这些方式都可以组织协同,都可以聚合起来完成一些事。但他们的层次是不同的,特点也不同。楼主可以思考一下这个角度。
    BeautifulSoap
        7
    BeautifulSoap  
    OP
       2024-09-21 10:56:37 +08:00 via Android
    @WildCat @amlee

    哥们,你们似乎阅读理解的方向错了?我这贴只是来发个牢骚告诉大家给 RSSHub 写源有多坐牢,又不是来质疑 RSSHub 为什么这么火的。
    世上火的项目千千万,里面实际代码写成一坨屎的也非常多。每个项目火都有自己的一些原因。莫觉得我就没法理解这种事
    BeautifulSoap
        8
    BeautifulSoap  
    OP
       2024-09-21 11:02:28 +08:00 via Android
    @nielinjie 嗯嗯,你说得似乎有点道理,但你说的内容和我这帖子想说的内容似乎并没啥关系。。。。。。看我 7L
    viWww0vvxmolvY5p
        9
    viWww0vvxmolvY5p  
       2024-09-21 11:32:25 +08:00   2
    @amlee 确实会营销,现在 rsshub 的作者又搞了个 rss 阅读器,给自媒体号发内测资格,我去哪都看到人推,属实有点烦了。
    WildCat
        10
    WildCat  
       2024-09-21 11:37:40 +08:00
    @BeautifulSoap 那可能是我理解有问题。

    「结果在请求网页的时候,RSSHub 几乎没有提供任何工具。它让开发者直接用 ofetch 这个包跳过 RSSHub 直接去请求网页。网络请求的所有细节和繁杂工作全都要每个源作者自己去处理。」就这点来说,严格来讲他们的设计是对的。单一职责原则啊。
    ztm0929
        11
    ztm0929  
       2024-09-21 11:46:49 +08:00 via iPhone   1
    有一说一,原作者大佬自己也在吐槽,我觉得你说的也在理。https://diygod.cc/6-year-of-rsshub

    营销的感觉见仁见智吧。

    我主要是想回答最后一段的问题,我的感受是它作为我这类非编程人员是一个很好的了解 RSS 以及爬虫的社区(当然也仅仅只是入门,精进还得靠自己)
    非常期待像你们这样的开发者去完善更新 RSS 世界(不一定只是这个项目)
    kdwnil
        12
    kdwnil  
       2024-09-21 11:50:34 +08:00 via Android
    RSSHub 本身是没法针对每个源去优化处理请求的,这个问题确实只能由各个源作者自己解决,否则只会变成另一个耦合地狱甚至更糟(牵一发而动全身最后导致不能改了,还不如直接指定一个请求库让源作者自己去用),ofetch 也已经封装了一部分功能了干脆就直接用就好,虽然我也发现换到 fetch 写爬虫是真的坐牢。至于资源池问题,看之前他们 po 过的官方实例的架构图总给我一种力大砖飞的感觉……

    想要专门针对某个网站直接写倒确实比写这源更省时省力省心
    Rrrrrr
        13
    Rrrrrr  
       2024-09-21 11:54:04 +08:00   2
    rss 炒冷饭,真喜欢看,没有工具你也天天去看。不喜欢看的,放你前面你就点已阅
    B4a1n
        14
    B4a1n  
       2024-09-21 12:04:19 +08:00
    所以我选择自己写想要网站的爬虫再自己聚合成 RSS
    0o0O0o0O0o
        15
    0o0O0o0O0o  
       2024-09-21 12:05:44 +08:00 via iPhone
    我主要是想用它的官方实例
    magiclx
        16
    magiclx  
       2024-09-21 13:48:17 +08:00
    一方面,我也遇到类似的问题,看了 RSSHub 的路由似乎满足,但由于我不喜欢 docker 部署,在手动部署 RSSHub 时就失败了,于是用 Python 和 PHP 自己搞定了,还灵活,转发 URL 在自己的 Client 中一订阅,效果非常好。

    另一方面,说 RSSHub 项目,我认为非常有价值,我可以订阅我关注消息源的更新通知,比自己打开浏览器或 App ,逐个刷要高效。RSSHub 超越了标准化的 RSS ,适配很多非 RSS 源,让大家可以用别人的适配来阅读内容。打破那些靠控制内容传播来间接收费的商业大公司的内容笼。

    你站在更高的层面思考问题,无论是 RSSHub 的路由,还是一段脚本,它提供的就是让内容可订阅的价值,在不考虑规模时,它们是等效的。
    DIYgods
        17
    DIYgods  
       2024-09-21 13:50:34 +08:00   24
    我也觉得写路由挺麻烦的,所以我们正在做 ci 工具来简化这一过程,楼主如果这么闲,有时间发这么大段文字来吐槽,不如来真正参与我们的开源项目,你就知道靠下班后业余七年时间维护一个充满历史遗留问题的庞然大物不是你那么简单几句话就能概括得了的,到时候也还不会觉得一切都应该是美好和理所当然的了

    正好我们几个维护者白天上班也挺忙的,毕竟也要赚钱吃饭,爱好不能当饭吃,没太多业余时间维护它,真诚邀请你来帮助我们

    * 另外营销只是我曾经写过几篇博客,和每个月自费几千刀运行官方服务,没有时间和精力做其他的营销操作了
    wangee
        18
    wangee  
       2024-09-21 13:52:21 +08:00 via iPhone
    的确欠缺对于速率的限制,对于反爬严重的网页,我是单独起了一个项目处理的
    ztm0929
        19
    ztm0929  
       2024-09-21 13:56:52 +08:00 via iPhone
    @DIYgods 官方实例建议通过一些标准流程开始收费(先试点一些冷门实例,大家不喜欢再做调整或换回免费),类似于开源博客系统 Ghost 的模式,我感觉似乎有很大一部分用户没有编程基础又渴望良好的体验(一些群聊观察到的)

    总感觉个人自费挺亏。
    lion
        20
    lion  
       2024-09-21 15:52:07 +08:00
    @DIYgods 最近因为 fellow 的热度开始关注 rss 订阅了,先从 rsshub 开始,确实是个不错的项目,保持心态,7 年的坚持确实很不容易
    lisxour
        21
    lisxour  
       2024-09-21 15:59:11 +08:00
    @WildCat #2 没用的,社区驱动大多都活不久,或者一堆源失效
    goodokgood1
        22
    goodokgood1  
       2024-09-21 16:02:40 +08:00
    @mway 确实,号称是下一代的阅读器,我激活了一个试用了几天,相比较传统的 rss 阅读器没发现什么特别之处
    Tink
        23
    Tink  
    PRO
       2024-09-21 16:32:28 +08:00
    他这个不算是爬虫框架,这些活可以让 ai 帮忙干
    BeautifulSoap
        24
    BeautifulSoap  
    OP
       2024-09-21 18:58:52 +08:00   1
    @DIYgods 作者你好,我不太理解网络请求部分的复杂度该如何通过 ci 进行简化。如果可以的话你能提供相关讨论或构想的链接吗?

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

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

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

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

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

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

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

    最后,如果这样吐槽能让你好受一点,也不错
    mark2025
        37
    mark2025  
       2024-09-23 16:06:38 +08:00
    @BeautifulSoap
    ========
    rsshub ……本质是个爬虫 …… 反爬对策的……RSSHub 提供网接口如 .get() .post() 来给我们调用
    ===================
    我没用过 rsshub ,就上面的信息我可能不正确的理解:
    1. rsshub 是个爬虫
    2. 你期望 rsshub 能提供接口来,底层实现反爬策略
    3. 如果 rsshub 实现这种接口,那么就有人会利用这些接口做不一定合法的事情。比如爬商品价格什么的
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     972 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 88ms UTC 19:11 PVG 03:11 LAX 11:11 JFK 14:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86