V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
BeautifulSoap
V2EX  ›  程序员

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

  •  
  •   BeautifulSoap · 1 天前 · 3307 次点击

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

    32 条回复    2024-09-22 14:05:24 +08:00
    amlee
        1
    amlee  
       1 天前   ❤️ 6
    架不住别人稳定运行很多年,用户多,会营销。

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

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

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

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

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

    营销的感觉见仁见智吧。

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

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

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

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

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

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

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

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

    ==========
    结果写到后来直接把我写得绷不住了,最大的问题:rsshub 作为专门将网页解析成 rss 的项目,实际上本质就是个大型的爬虫。而作为一个爬虫,请求各种网站的时候你肯定需要有一点反爬对策的。比如我期待就是 RSSHub 会提供一些网络请求的接口如 .get() .post() 来给我们调用,底层一些简单的杂活累活就由 RSSHub 来负责,我只需要提供相应请求信息之类的,然后对结果进行解析 or 处理更复杂的页面逻辑 or 反爬逻辑
    ===========
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2446 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 06:28 · PVG 14:28 · LAX 23:28 · JFK 02:28
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.