东北二人转365首视频,用Go语言扒数据,才发现这事儿比想象中有意思

说实话,我一开始也没想到自己会跟东北二人转和Go语言这两样东西搅和到一块儿,事情是这样的——上个月老家亲戚让我帮忙找点二人转视频,说是过...

说实话,我一开始也没想到自己会跟东北二人转Go语言这两样东西搅和到一块儿,事情是这样的——上个月老家亲戚让我帮忙找点二人转视频,说是过年要放给老人们看,我寻思着这还不简单?结果一搜“东北二人转365首视频”,好家伙,链接满天飞,真正能用的没几个。

东北二人转365首视频,用Go语言扒数据,才发现这事儿比想象中有意思

刚好那阵子我在学Go,就想干脆写个爬虫,把能用的视频资源整理出来,没想到这一搞,不仅视频没少看,还把Go的并发模型标准库给练了个透,今天就跟大伙儿聊聊,这事儿到底怎么干的,又踩了哪些坑。

用Go写爬虫,其实就是三步走

很多人一听爬虫就觉得得用Python,其实Go也挺顺手,特别是处理这种需要批量下载的场景,Go的goroutine简直是神器。

第一步:确定目标网站的结构

那些号称有“365首”的视频网站,其实大多数是聚合站,我去看了一眼,基本结构都差不多:

网站类型 特点 缺点
视频聚合站 列表页有分页,每页30-50个视频 很多是外链,直接下不了
个人博客 按年份或专辑分类 更新慢,可能断更
论坛帖子 百度网盘链接 需要手动提取,费时

挑来挑去,我选了一个相对稳定的聚合站——视频列表页URL有规律,/video/list/1/video/list/2这样,这就好办了,直接循环请求。

第二步:用Go的net/http拿页面

代码其实就几行:

resp, err := http.Get("https://example.com/video/list/1")
if err != nil {
    log.Fatal(err)
}
defer resp.Body.Close()

不过我碰到一个坑——有些网站会反爬虫,直接返回空页面或者让你输验证码,后来我给请求加了个User-Agent头,模拟浏览器访问,基本就过了。

req, _ := http.NewRequest("GET", url, nil)
req.Header.Set("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64)")

这一步折腾了我两天,才发现请求头伪装这事儿,不管是Go还是Python,思路都一样。

第三步:用goquery解析页面内容

拿到HTML之后,我用了个叫goquery的库,它跟jQuery的用法很像,写起来很舒服,比如提取视频标题和链接:

doc.Find("div.video-item").Each(func(i int, s *goquery.Selection) {:= s.Find("h3 a").Text()
    link, _ := s.Find("a").Attr("href")
    fmt.Printf("%s -> %s\n", title, link)
})

结果一跑,发现很多链接其实是广告跳转,点进去是游戏推广,没办法,只能再写个过滤函数,把包含“game”、“ad”字眼的链接扔掉。

爬了200页,发现“365首”只是个噱头

你是不是也觉得,“东北二人转365首视频”这个名字听着特诱人?好像一天一首,一年不重样,真相是——很多网站为了SEO,故意起这种带数字的名字,实际上我爬了200页,真正不重复的视频也就180多首,而且很多是同一段子不同人演的版本。

西厢观画》这个传统段子,我就扒到了至少6个版本

  • 赵本山早期版本(画质糊得像马赛克)
  • 小沈阳翻唱版(加了流行元素)
  • 老艺人刘震的完整版(将近40分钟)
  • 还有几个不知名艺人的片段版

这时候Go的goroutine就派上用场了,我用sema := make(chan struct{}, 10)控制并发数,同时下载多个视频,速度直接翻倍。

for _, v := range videos {
    sema <- struct{}{}
    go func(video Video) {
        defer func() { <-sema }()
        download(video.URL, video.Title)
    }(v)
}

下载量一大,IP就被封了,后来搞了个代理池,隔段时间换一个IP,才算搞定。

这些视频到底有没有用?得看你怎么看

说实话,真把这些视频全下下来,我也没怎么看完,但我觉得这事儿的关键不在于数量,而在于分类和筛选

我最后整理出来的目录长这样:

  • 经典传统段子:黄氏女游阴、大西厢、蓝桥
  • 现代改编版:加了RAP、电音的那种
  • 教学版:有字幕,适合学唱
  • 访谈类:老艺人讲段子背后的故事

有了这些分类,亲戚过年放的时候就能根据观众喜好来选,老人爱听传统的,年轻人乐意听改编的,各取所需。

Go语言写爬虫,到底香不香?

用Go写这个爬虫,我最大的感受是——编译快、部署简单、并发顺手,比起Python,Go编译成一个二进制文件,直接扔到服务器上就能跑,不用装环境,而且goroutine处理I/O密集型任务确实轻量,1000个并发都不费劲。

但Go也有短板:生态不如Python丰富,比如数据分析、机器学习这块,Python一骑绝尘,好在爬虫这事儿,Go完全够用,加上collygoquery这些库,写起来也挺快。

对了,提一句,有个叫《Go语言实战》的书讲并发讲得挺透,我就是从里面学的channelgoroutine配合的写法。

那些我爬到的有意思的冷知识

扒视频的过程中,我也顺手看了不少内容,有些点挺有意思的:

  • 二人转的“说口”部分,其实即兴发挥很多,同一个段子不同演员能玩出花儿来
  • 有首叫《情人迷》的,早期版本和现在版本歌词完全不一样,改了好几版
  • 很多老视频是从录像带转的,声音里还能听到磁带转动的“沙沙”声,特亲切
  • 有个up主整理了东北二人转365首视频合辑,说是365首,其实只有243首是真的,剩下的是其他剧种混进去的

看到这些,我就觉得这事儿没白干,虽然爬下来的视频大部分我也没时间看,但至少在整理的过程中,我重新认识了这门民间艺术,它不像春晚小品那么精致,但那股子粗粝的烟火气,特别真实。

最后说一句,如果真有人想用Go做类似的事儿,建议先从标准库开始,别一上来就上框架,标准库玩透了,后面用啥都顺手,我刚开始老想找现成的包,结果越搞越复杂,还不如自己造轮子来得快。

本文来自作者[kyadmin]投稿,不代表be365立场,如若转载,请注明出处:http://www.uss1.cn/nba/425.html

(3)

文章推荐

发表回复

本站作者才能评论

评论列表(4条)

  • kyadmin
    kyadmin 2026-06-28

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

  • kyadmin
    kyadmin 2026-06-28

    希望本篇文章《东北二人转365首视频,用Go语言扒数据,才发现这事儿比想象中有意思》能对你有所帮助!

  • kyadmin
    kyadmin 2026-06-28

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

  • kyadmin
    kyadmin 2026-06-28

    本文概览:说实话,我一开始也没想到自己会跟东北二人转和Go语言这两样东西搅和到一块儿,事情是这样的——上个月老家亲戚让我帮忙找点二人转视频,说是过...

    联系我们

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

    关注我们