如何用colly爬取网络上的所有图片?
2024-03-27 14:41:44
113
使用Colly爬取网络图片
先决条件:
- 已安装Colly库 https://go.dev/github.com/gocolly/colly
- 已安装ImageMagick工具 https://imagemagick.org/
步骤:
- 导入必要的库
import (
"fmt"
"log"
"os"
"path/filepath"
"github.com/gocolly/colly"
"github.com/gocolly/colly/extensions"
)
- 创建Colly收集器
collector := colly.NewCollector(
colly.AllowedDomains("example.com"),
colly.CacheDir("./.cache"),
)
- 启用文件保存扩展
extensions.FileSaver(collector)
- 设置文件保存路径
dir := "./images"
os.MkdirAll(dir, os.ModePerm)
collector.SetFileName("example.jpg")
collector.SetSaveDir(dir)
- 处理页面并保存图片
collector.OnHTML("img", func(e *colly.HTMLElement) {
src := e.Attr("src")
// 保存图片if _, err := e.Request.Get(src); err != nil {
log.Printf("Error saving image: %s\n", err)
}
// 转换为JPG格式ext := filepath.Ext(src)
if ext != ".jpg" {
newPath := filepath.Join(dir, filepath.Base(src)) + ".jpg"
if err := os.Rename(e.FileName(), newPath); err != nil {
log.Printf("Error renaming file: %s\n", err)
}
}
})
- 访问目标URL并启动收集器
collector.Visit("https://example.com")
collector.Wait()
示例:
将以下代码保存到一个 .go
文件中:
package main
import (
"fmt"
"log"
"os"
"path/filepath"
"github.com/gocolly/colly"
"github.com/gocolly/colly/extensions"
)
func main() {
collector := colly.NewCollector(
colly.AllowedDomains("example.com"),
colly.CacheDir("./.cache"),
)
extensions.FileSaver(collector)
dir := "./images"
os.MkdirAll(dir, os.ModePerm)
collector.SetFileName("example.jpg")
collector.SetSaveDir(dir)
collector.OnHTML("img", func(e *colly.HTMLElement) {
src := e.Attr("src")
if _, err := e.Request.Get(src); err != nil {
log.Printf("Error saving image: %s\n", err)
}
ext := filepath.Ext(src)
if ext != ".jpg" {
newPath := filepath.Join(dir, filepath.Base(src)) + ".jpg"
if err := os.Rename(e.FileName(), newPath); err != nil {
log.Printf("Error renaming file: %s\n", err)
}
}
})
collector.Visit("https://example.com")
collector.Wait()
fmt.Println("All images saved to", dir)
}
运行该文件会将所有符合条件的图片从给定URL下载并保存在指定的目录中。