用Go语言写一个365家常菜小视频爬虫,轻松攒下一年菜谱
- 单站
- 2026-07-08 22:03:21
- 324
说实话,我做饭挺烂的,不是不想学,是每次打开美食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语言坑,你们避开:
- HTTP请求超时:这个必须设,不然卡住了整个程序就死了
- ChromeDriver版本匹配:如果你是模拟浏览器抓取,记得更新驱动
- 中文字符编码:Go默认UTF-8,但有的源站用GBK,需要手动转码
有一次跑程序,连续报了30个错误——好家伙,那天网站改版了,改吧,花了两小时重新适配。编写代码的过程就像做菜,总得翻几次车才能熟练。
最后唠叨两句
我一直觉得,技术应该服务于生活,写这爬虫,不是为了炫技,而是为了实实在在解决“每天做什么饭”这个小事,365家常菜小视频这系列,是真的用心在做家常菜,你跟着学,哪怕就记住10道,日常也足够应付了。
Go语言写完,放到服务器上,每天自动跑一次,然后推送到手机,起床刷个牙的功夫,今天的菜谱就已经躺我微信里了。
要不你也试试?代码量不大,但用起来是真香。
