当前位置:首页 > 单站 > 正文

用Go语言写一个365家常菜小视频爬虫,轻松攒下一年菜谱

  • 单站
  • 2026-07-08 22:03:21
  • 324
摘要: 说实话,我做饭挺烂的,不是不想学,是每次打开美食App,满屏都是花里胡哨的“米其林级别”摆盘,直到我发现了365家常菜小视频这个...

说实话,我做饭挺烂的,不是不想学,是每次打开美食App,满屏都是花里胡哨的“米其林级别”摆盘,直到我发现了365家常菜小视频这个宝藏——每天一道家常菜,不整虚的,调料、火候、步骤都拍得清清楚楚,可问题来了:我总不能天天蹲在手机前翻吧?那得浪费多少流量和时间。

我决定用Go语言写个小工具,把这些小视频信息抓下来。Go的并发处理能力特别适合干这种活儿,协程一开,嗖嗖地就把数据拉回来了。

为什么要抓365家常菜小视频?

先说说这365家常菜小视频到底好在哪:

  • 每日更新,365天不重样
  • 步骤极简,每道菜不超过3分钟
  • 食材家常,菜市场超市都能买到
  • 调料普通,不用整什么稀奇古怪的酱料

我身边好几个朋友,跟着这个系列学做饭,现在已经能独立整出一桌年夜饭了,你说香不香?

Go爬虫核心代码怎么设计?

我分了三步走,每一步都带着Go语言的“小巧但高效”特点。

1 定义数据结构

type Recipe struct {
    ID      int    `json:"id"`  string `json:"title"`
    URL     string `json:"url"`
    Date    string `json:"date"`
    Tags    []string `json:"tags"`
}

就这么几个字段,够用了,实际项目中字段肯定更多,但Less is more,初期抓下来够用就行。

2 并发抓取

func fetchRecipes(dates []string) []Recipe {
    ch := make(chan Recipe, len(dates))
    for _, date := range dates {
        go func(d string) {
            recipe := scrapeSingleDay(d)
            ch <- recipe
        }(date)
    }
    var recipes []Recipe
    for range dates {
        recipes = append(recipes, <-ch)
    }
    return recipes
}

Goroutine这玩意儿真香,普通Python爬虫抓10天的数据得等十来秒,Go程序一启动,三四秒全搞定,365家常菜小视频每天一条,一年365条,跑一遍也就半分钟的事。

3 数据存储

我存成了JSON文件,也支持导出CSV,为什么?因为我媳妇儿只看得懂Excel表格

字段名 类型 说明
ID 整数 唯一标识
链接 字符串 视频地址
发布日期 日期 格式2024-01-01
列表 如红烧、清蒸

你能拿这份数据做什么?

抓下来365家常菜小视频的元数据之后,玩法就多了:

  • 整理成你自己的菜谱专辑:按食材分类,猪肉、鸡肉、蔬菜各一栏
  • 统计做菜频率:看看哪类菜最常出现(我发现红烧类占25%左右)
  • 做个性化推荐:喜欢辣的,就把麻辣系列拎出来

我最初只是想解决“晚上吃啥”这个灵魂问题,现在呢?365道菜整整齐齐排着队,轮着吃一年不重复。

代码里踩过的坑

说几个我实际遇到的Go语言坑,你们避开:

  1. HTTP请求超时:这个必须设,不然卡住了整个程序就死了
  2. ChromeDriver版本匹配:如果你是模拟浏览器抓取,记得更新驱动
  3. 中文字符编码:Go默认UTF-8,但有的源站用GBK,需要手动转码

有一次跑程序,连续报了30个错误——好家伙,那天网站改版了,改吧,花了两小时重新适配。编写代码的过程就像做菜,总得翻几次车才能熟练。

最后唠叨两句

我一直觉得,技术应该服务于生活,写这爬虫,不是为了炫技,而是为了实实在在解决“每天做什么饭”这个小事,365家常菜小视频这系列,是真的用心在做家常菜,你跟着学,哪怕就记住10道,日常也足够应付了。

Go语言写完,放到服务器上,每天自动跑一次,然后推送到手机,起床刷个牙的功夫,今天的菜谱就已经躺我微信里了。

要不你也试试?代码量不大,但用起来是真香。

用Go语言写一个365家常菜小视频爬虫,轻松攒下一年菜谱