Golang爬虫

简介: 示例爬去美女图

申明仅供学习

一、准备工作

网站:亿图网爬取美女图(https://www.yeitu.com
go语言基础

二、爬取美女区域(/meinv/)

先梳理流程(暂不编码)
找到对应的导航栏
image.png
复制标签对应的selector
image.png

body > div:nth-child(4) > div.yt-title > h3 > a

删除:nth-child(4)保留所需的: body > div > div.yt-title > h3 > a

代码获取到对应的链接后,请求地址(例:https://www.yeitu.com/meinv/xinggan/

image.png
同理找到对应的标签,复制selector
body > div.list_tags.w > div.list_tags_box > a
代码获取对应的地址,拼接上https://www.yeitu.com(例:https://www.yeitu.com/tag/siwameitui/
请求该地址
image.png
找到具体的图片标签,复制selector

tag_box > div > a > img

获取所需美女图片的地址

三、代码爬取

package main

import (
    "bufio"
    "fmt"
    "github.com/gocolly/colly"
    "os"
    "strconv"
)


func main() {
    yeitu()
}

// 亿图网爬取美女图
var baseUrl = "https://www.yeitu.com"

func yeitu() {
    var homeUrl = baseUrl + "/meinv/"
    fetch1(homeUrl)
}
func fetch1(url string) {
    col := colly.NewCollector()
    // 检测请求
    col.OnRequest(func(req *colly.Request) {
        fmt.Println("检测一个请求......")
    })
    // 检测响应
    col.OnResponse(func(r *colly.Response) {
        fmt.Println("检测一个响应......")
    })
    // 定位img标签。注册该函数,框架内部回调
    col.OnHTML("body > div > div.yt-title > h3 > a", func(elem *colly.HTMLElement) {
        // 获取标签对应属性的值。
        attr := elem.Attr("href")
        fetch2(attr)
    })

    col.Visit(url)
}
func fetch2(url string) {
    col := colly.NewCollector()
    // 检测请求
    col.OnRequest(func(req *colly.Request) {
        fmt.Println("检测一个请求......")
    })
    // 检测响应
    col.OnResponse(func(r *colly.Response) {
        fmt.Println("检测一个响应......")
    })
    // 定位img标签。注册该函数,框架内部回调
    col.OnHTML("body > div.list_tags.w > div.list_tags_box > a", func(elem *colly.HTMLElement) {
        // 获取标签对应属性的值。
        attr := elem.Attr("href")
        fetch3(baseUrl + attr)
    })

    col.Visit(url)
}
func fetch3(url string) {
    col := colly.NewCollector()
    // 检测请求
    col.OnRequest(func(req *colly.Request) {
        fmt.Println("检测一个请求......")
    })
    // 检测响应
    col.OnResponse(func(r *colly.Response) {
        fmt.Println("检测一个响应......")
    })
    // 定位img标签。注册该函数,框架内部回调
    col.OnHTML("#tag_box > div > a > img", func(elem *colly.HTMLElement) {
        // 获取标签对应属性的值。
        attr := elem.Attr("src")
        fmt.Println(attr + "\n")
    })
    col.Visit(url)
}

四、优化

可以使用多线程,并且分页爬取,保存的时候按图片分类存储

目录
相关文章
|
13天前
|
数据采集 存储 Go
Golang爬虫代理接入的技术与实践
Golang爬虫代理接入的技术与实践
|
数据采集 Go
Golang:colly 采用 Go 语言编写的 Web 爬虫框架
Golang:colly 采用 Go 语言编写的 Web 爬虫框架
119 0
Golang:colly 采用 Go 语言编写的 Web 爬虫框架
|
Web App开发 数据采集 Go
Golang福利爬虫
版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/81357563 没事的时候跑两把,穷人专用。
1141 0
|
Web App开发 数据采集 JavaScript
golang爬虫初体验
最近在学习golang,看网上很多人都喜欢爬豆瓣,今天我就写了一个golang版的爬虫。对于python爬虫,我很了解,什么dom树,js异步,爬虫技术栈都是没问题的。
2738 0
|
5天前
|
监控 算法 Go
Golang深入浅出之-Go语言中的服务熔断、降级与限流策略
【5月更文挑战第4天】本文探讨了分布式系统中保障稳定性的重要策略:服务熔断、降级和限流。服务熔断通过快速失败和暂停故障服务调用来保护系统;服务降级在压力大时提供有限功能以保持整体可用性;限流控制访问频率,防止过载。文中列举了常见问题、解决方案,并提供了Go语言实现示例。合理应用这些策略能增强系统韧性和可用性。
30 0
|
3天前
|
分布式计算 Java Go
Golang深入浅出之-Go语言中的分布式计算框架Apache Beam
【5月更文挑战第6天】Apache Beam是一个统一的编程模型,适用于批处理和流处理,主要支持Java和Python,但也提供实验性的Go SDK。Go SDK的基本概念包括`PTransform`、`PCollection`和`Pipeline`。在使用中,需注意类型转换、窗口和触发器配置、资源管理和错误处理。尽管Go SDK文档有限,生态系统尚不成熟,且性能可能不高,但它仍为分布式计算提供了可移植的解决方案。通过理解和掌握Beam模型,开发者能编写高效的数据处理程序。
131 1
|
4天前
|
缓存 测试技术 持续交付
Golang深入浅出之-Go语言中的持续集成与持续部署(CI/CD)
【5月更文挑战第5天】本文介绍了Go语言项目中的CI/CD实践,包括持续集成与持续部署的基础知识,常见问题及解决策略。测试覆盖不足、版本不一致和构建时间过长是主要问题,可通过全面测试、统一依赖管理和利用缓存优化。文中还提供了使用GitHub Actions进行自动化测试和部署的示例,强调了持续优化CI/CD流程以适应项目需求的重要性。
43 1
|
4天前
|
Kubernetes Cloud Native Go
Golang深入浅出之-Go语言中的云原生开发:Kubernetes与Docker
【5月更文挑战第5天】本文探讨了Go语言在云原生开发中的应用,特别是在Kubernetes和Docker中的使用。Docker利用Go语言的性能和跨平台能力编写Dockerfile和构建镜像。Kubernetes,主要由Go语言编写,提供了方便的客户端库与集群交互。文章列举了Dockerfile编写、Kubernetes资源定义和服务发现的常见问题及解决方案,并给出了Go语言构建Docker镜像和与Kubernetes交互的代码示例。通过掌握这些技巧,开发者能更高效地进行云原生应用开发。
44 1
|
4天前
|
负载均衡 监控 Go
Golang深入浅出之-Go语言中的服务网格(Service Mesh)原理与应用
【5月更文挑战第5天】服务网格是处理服务间通信的基础设施层,常由数据平面(代理,如Envoy)和控制平面(管理配置)组成。本文讨论了服务发现、负载均衡和追踪等常见问题及其解决方案,并展示了使用Go语言实现Envoy sidecar配置的例子,强调Go语言在构建服务网格中的优势。服务网格能提升微服务的管理和可观测性,正确应对问题能构建更健壮的分布式系统。
26 1
|
5天前
|
消息中间件 Go API
Golang深入浅出之-Go语言中的微服务架构设计与实践
【5月更文挑战第4天】本文探讨了Go语言在微服务架构中的应用,强调了单一职责、标准化API、服务自治和容错设计等原则。同时,指出了过度拆分、服务通信复杂性、数据一致性和部署复杂性等常见问题,并提出了DDD拆分、使用成熟框架、事件驱动和配置管理与CI/CD的解决方案。文中还提供了使用Gin构建HTTP服务和gRPC进行服务间通信的示例。
21 0