学习Golang语言也有一段时间了,对Golang的一些特性和优点也了解了不少,工作闲暇之余写了个爬取网页图片的小工具玩,有喜欢的码友可以下载下来编译玩玩,项目代码路径:
代码中主要是用 go 和 channel 配合使用,开启多个线程并发处理,一边爬取并解析网页,一边下载图片,如图所示:
waitGroup.Add(1)
go func() {
urls = append(urls, TARGET_URL)
for url:=urls[0]; len(urls)>0;{
getUrl(url)
}
fmt.Println("解析所有url结束!")
// 解析完成,释放chanUrl
close(chanUrl)
waitGroup.Done()
}()
waitGroup.Add(1)
go func() {
for url := range chanUrl {
getPictureUrl(url)
}
fmt.Println("解析所有图片url结束!")
// 解析完成,释放chanUrl
close(chanImgUrl)
waitGroup.Done()
}()
// 解析目标url
chanUrl <- TARGET_URL
// 开启多个下载线程
for i:=0; i<5; i++ {
waitGroup.Add(1)
go readChanUrl(chanImgUrl)
}
waitGroup.Wait()
这段代码中,开启了3个go协程任务:
第一个用来通过源URL无限爬取网页URL资源
第二个用来解析单个网页上的图片url
第三个用来下载图片
网页URL,以及图片URL通过 chan 传输,是典型的生产者-消费者模式。
喜欢的码友请轻轻点赞喔,看到写的不对的地方还请轻敲。