内容提要
本文介绍如何用 Go 语言结合 Gin 框架和 Colly 爬虫库搭建图片爬取与展示服务:通过 go mod 初始化项目,用 Gin 设置静态资源和分组路由,在 handlers 中实现爬取 Pixivision 图片并保存到本地,支持代理、并发限制和 Referer 设置,配置写入 configure.yaml,最后可部署到 Render。
延伸解读
项目结构与模块化设计
文章采用清晰的目录划分:main.go 负责初始化 Gin 路由和静态资源,routes 文件夹定义分组路由,handlers 存放具体处理逻辑。这种分层让爬虫、路由和配置解耦,便于维护和扩展。使用 go mod init 初始化项目,依赖管理更规范。
爬虫的并发与反爬策略
代码通过 Colly 的 LimitRule 对 pximg 和 pixivision 域名分别设置并发数、延迟和随机延迟,避免请求过快被封。同时设置 UserAgent、Referer 和可选的 HTTP/Socks5 代理,并限制允许域名,这些措施提升了爬取的稳定性和隐蔽性。
配置与部署的灵活性
爬取页数、下载路径、代理等参数通过 configure.yaml 外部配置,无需修改代码即可调整行为。文章还提到可部署到 Render 平台,并提供了 Docker 镜像,方便读者快速运行和体验。
Q&A
如何用Gin框架设置静态文件服务和分组路由?
在Gin中,使用router.Static("/img", "./imgs")设置静态资源目录,然后通过router.Group("/api")创建分组路由,并在分组上注册各个处理函数。
用Colly爬取Pixivision图片时如何设置代理和并发限制?
通过colly.NewCollector创建收集器,使用c.SetProxy设置代理(支持http和socks5),并通过c.Limit设置并发限制,例如对pximg和pixivision域名分别设置Parallelism和延迟。
爬取Pixivision图片时为什么要设置Referer?如何设置?
因为Pixivision的图片服务器i.pximg.net有防盗链机制,需要设置Referer为https://www.pixivision.net/才能正常下载图片。在Colly的OnRequest回调中通过r.Headers.Set("Referer", "https://www.pixivision.net/")设置。
如何将爬取的图片保存到本地?
在Colly的OnResponse回调中,判断响应URL是否为图片,然后使用r.Save(img_path)将图片保存到本地指定路径,路径中可包含从页面提取的标题作为文件夹名。
项目中的配置文件configure.yaml用来做什么?
configure.yaml用于配置爬虫相关参数,例如允许的域名、代理设置、爬取目录数量限制、下载根目录等,方便统一管理配置。
这个Gin+Colly项目可以部署到哪里?
可以部署到Render云平台,项目也提供了Docker镜像(proanimer/goimg),可以通过docker pull proanimer/goimg获取。