用Golang写了个爬虫,就为了追365dni第二季?聊聊多多视频这档子事

起得有点长,但确实是我最近干的一件“蠢事”,说来有点不好意思,为了在“多多视频”上看《365dni》第二季(就是那部波兰大尺度爱情片《黑...

起得有点长,但确实是我最近干的一件“蠢事”,说来有点不好意思,为了在“多多视频”上看《365dni》第二季(就是那部波兰大尺度爱情片《黑帮大佬和我的365日》的续集),我居然动手用Go语言写了个小工具,不是因为我多爱折腾代码,纯粹是因为——那个App的推荐算法实在太“懂”我了,但缓存机制又太“折磨”我了。

先说结论:为什么是Go?

你可能要问,追个剧而已,至于用Golang吗?Python不香吗?还真不是。“多多视频”这个平台有个特点:它的资源链接经常变,尤其是像《365dni》第二季这种热门资源,今天这个源,明天那个源,你要是手动复制链接,手指头都能点抽筋,用Python写当然也行,但Go的并发处理能力,对于同时检测十几个视频源是否有效这个场景,简直是量身定做。

用Golang写了个爬虫,就为了追365dni第二季?聊聊多多视频这档子事

Go编译出来是个单独的二进制文件,扔在树莓派上就能跑,不像Python还得装一堆依赖,我就是想在客厅的电视盒子上挂个脚本,自动刷新“多多视频”里《365dni》的播放地址,省得每次想重温一下那“名场面”还得跟App里的广告斗智斗勇。

“多多视频”里的《365dni》第二季:观感乱谈

先别急着骂我猥琐,咱聊点实际的。《365dni》第二季在“多多视频”上的画质确实不错,但有两个问题:

  1. 字幕不同步:很多源的字幕是机翻的,尤其男主角那低音炮念台词的时候,字幕比人慢半拍。
  2. 删减问题:某些源标注“完整版”,但实际还是剪了几刀,我用Go写了个小脚本,专门比对不同源的文件大小,只要视频文件大小和源站标注相差超过5%,我就把它标记为“疑似删减”

这可比你肉眼盯着屏幕找删减痕迹靠谱多了,代码逻辑很简单,就是发送HTTP请求拿Content-Length,然后对比,但就这么个小功能,让我少踩了不少坑。

Go语言实战:我怎么抓“多多视频”的链接

这里我得说清楚,我没去破解人家App的加密协议,那是不对的,我用的方法是模拟用户在App里的操作流程,具体步骤如下:

  1. 抓包(用Charles或Fiddler),拿到“多多视频”搜索《365dni》第二季时返回的JSON数据接口。
  2. 用Go的net/http库模拟请求,带上必要的User-AgentReferer头。
  3. 关键点:解析JSON里的play_url字段,但这是个加密后的字符串,我用了Go的crypto/aes库,通过逆向JavaScript代码找到的密钥(别问,问就是公开的秘密),解密后得到真实的视频源地址。

代码不长,大概一百来行,但有个细节让我折腾了一晚上:“多多视频”的接口做了限流,同一个IP,一分钟只能请求30次,刚开始我没注意,直接上了一个sync.WaitGroup来并发拉取所有剧集的链接,结果直接触发封禁,IP被锁了一个小时。

后来学乖了,用信道(Channel)做令牌桶限流

// 简单的令牌桶,每秒恢复5个令牌
ticker := time.NewTicker(time.Second / 5)
for i := 0; i < len(episodes); i++ {
    <-ticker.C // 阻塞等待令牌
    go fetchEpisode(i)
}

就这么一个小改动,既没被封IP,又比串行快了三倍。这就是Go的工程美感——不花哨,但解决问题。

多多视频”App的一点小吐槽

用Go写爬虫的过程中,我翻了下“多多视频”的代码结构(静态分析APK),发现它用的是Flutter框架,这就导致一个问题:它的滚动加载是自绘的,你用普通的Appium或Airtest做UI自动化根本没法直接拿到控件树,但我用Go配合fyne库写了个桌面小程序,直接通过系统代理转发流量,反而比在手机上操作更稳定。

推荐算法有点“上头”,你在“多多视频”上看了《365dni》第一季,首页就给你推《五十度灰》《格雷的五十道阴影》……我一度怀疑这App的推荐策略是不是就一个关键词匹配:“大尺度”,但话说回来,它能让我快速找到第二季的完整版资源,这点还是值得肯定的。

给同样想折腾的人几条干货

如果你也想用Go语言搞点类似的事儿(不一定是这个App,任何流媒体平台同理),给你几条建议:

注意事项 具体说明
别碰DRM 如果有M3U8加密或者Widevine保护,直接放弃,Go不是干这个的料,也别去逆向那些复杂的混淆代码。
善用stringsregexp 很多网页版接口返回的是HTML而非JSON,用Go的goquery库解析比正则快得多,但注意内存泄漏goquery比较吃内存。
日志打点 别忘了用log库记录每次请求的URL、状态码和耗时,我就是靠日志才发现“多多视频”的某个CDN节点在晚上8点后速度会掉到50KB/s。
防封只是基础 务必设置随机延时,我用math/rand配合time.Sleep生成了1到3秒的随机等待,看起来像一个真人手滑在刷新。

写在最后(但这不算结尾)

说实话,折腾这个Go脚本,比看《365dni》第二季本身还有意思,因为电影的剧情嘛,大家懂就好——男主帅,女主美,船戏多,三观跟着五官走,但写代码的过程,那种“搞定一个棘手bug”的快感,比看剧里男主脱衣服的瞬间来得更持久。

现在我的树莓派还在每半小时跑一次这个脚本,把最新的播放地址推送到我的Telegram频道。“多多视频”的源有时候会挂掉,但我的Go脚本比它的运维还勤快,你要是也在追这部剧,或者有任何用Go处理视频站资源的问题,可以在评论区聊聊,我知道的不多,但踩过的坑绝对不少。

对了,千万别用它来干违法的事,就追追剧好了。

本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://hljbesthome.com/nengyuan/2247.html

(12)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-08-14

    我是be365的签约作者“kyadmin”!

  • kyadmin
    kyadmin 2026-08-14

    希望本篇文章《用Golang写了个爬虫,就为了追365dni第二季?聊聊多多视频这档子事》能对你有所帮助!

  • kyadmin
    kyadmin 2026-08-14

    本站[be365]内容主要涵盖:be365,be365网站,be365网址,ball365体育,Be365排名

  • kyadmin
    kyadmin 2026-08-14

    本文概览:起得有点长,但确实是我最近干的一件“蠢事”,说来有点不好意思,为了在“多多视频”上看《365dni》第二季(就是那部波兰大尺度爱情片《黑...

    联系我们

    工作时间:周一至周五,9:30-18:30,节假日休息

    关注我们