Go 爬虫三种框架的基本使用介绍

这篇具有很好参考价值的文章主要介绍了Go 爬虫三种框架的基本使用介绍。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

当今互联网时代,数据已经成为了一种非常宝贵的资源。而爬虫技术则是获取这些数据的一种重要手段。Go 作为一门现代化的编程语言,其在爬虫领域也有着广泛的应用。在本篇博客文章中,我们将会介绍一些常用的 Go 爬虫框架,并且会通过一个简单的示例来演示如何使用这些框架。

Go 爬虫三种框架的基本使用介绍

1. Colly

Colly 是一个简单而又强大的 Go 爬虫框架,其使用起来非常方便。在 Colly 中,我们可以通过注册回调函数来处理页面中的数据,同时还可以使用 CSS 选择器进行页面元素的定位。Colly 还支持异步请求、代理、Cookie 管理等功能,是一个非常实用的爬虫框架。

2. Golang.org/x/net/html

Golang.org/x/net/html 是 Go 语言标准库中的一个子库,其提供了一系列操作 HTML 的函数和类型。使用这个库可以方便地解析 HTML 页面,并且可以通过 CSS 选择器定位页面元素。但是需要注意的是,由于其只提供了 HTML 解析的功能,因此在使用过程中需要自己实现网络请求等功能。

3. GoQuery

GoQuery 是一个类似于 jQuery 的 Go 库,其提供了类似于 jQuery 中的选择器语法,可以方便地对 HTML 页面中的元素进行定位和操作。同时,GoQuery 还支持链式调用、筛选器等功能,使用起来非常方便。

Go 爬虫示例

使用Go中的http包进行爬虫

爬虫是一项很有趣的技能,它可以帮助我们快速地获取大量的数据并进行分析、挖掘。Go语言中的http包提供了非常强大的网络访问功能,我们可以很容易地使用它来实现一个简单的爬虫。

在本文中,我们将使用Go语言的http包创建一个简单的爬虫程序。我们将使用http包来获取任何网页的内容,并将其解析为可读性更好的格式,以便进行数据分析和挖掘。

Step 1:导入包

我们首先需要导入Go语言的http和fmt包,分别用于进行网络请求和打印输出:

package main

import (
	"fmt"
	"net/http"
)
Step 2:发送请求

我们需向目标网站发起请求,获取数据后再进行分析。这里我们选择获取百度首页的HTML代码。

func main() {
	resp, err := http.Get("https://www.baidu.com")
	if err != nil {
		fmt.Println("请求失败:", err)
	}
	defer resp.Body.Close()
}

我们使用http包中的Get()方法,传入带有协议头的网址,如果请求失败则打印错误信息。我们使用defer语句保证在函数退出时关闭响应,以释放资源。

Step 3:读取响应

接下来我们需要使用ioutil包来读取响应体内的内容,并将其储存在一个字符串变量中。

package main

import (
	"fmt"
	"io/ioutil"
	"net/http"
)

func main() {
	resp, err := http.Get("https://www.baidu.com")
	if err != nil {
		fmt.Println("请求失败:", err)
	}
	defer resp.Body.Close()
	body, err := ioutil.ReadAll(resp.Body)
	if err != nil {
		fmt.Println("读取响应失败:", err)
	}
	fmt.Println(string(body))
}

我们首先导入ioutil包,然后使用ReadAll()函数读取响应体的内容,并将其储存在一个字节切片中。最后,我们使用fmt.Println()将这些内容打印到终端。

Step 4:解析HTML

我们已成功地获取了网页的HTML代码,但在继续进行数据分析和挖掘之前,我们必须将其解析为可读性更好的格式。我们可以使用正则匹配的方式查找网页内容。我们这里使用第三方包goquery,它提供了一些实用程序来帮助我们解析HTML和XML文档。

package main

import (
	"fmt"
	"net/http"

	"github.com/PuerkitoBio/goquery"
)

func main() {
	resp, err := http.Get("https://www.baidu.com")
	if err != nil {
		fmt.Println("请求失败:", err)
	}
	defer resp.Body.Close()
	doc, err := goquery.NewDocumentFromReader(resp.Body)
	if err != nil {
		fmt.Println("解析HTML失败:", err)
	}
	fmt.Println(doc.Find("title").Text())
}

我们使用NewDocumentFromReader()函数将响应体数据转换为goquery.Document类型,该类型是能够读取并查询HTML和XML文档的类型。最后,我们使用Find()函数在整个文档中查找title元素,然后使用Text()函数将其文本内容输出到控制台。

Step 5:总结

我们已经成功地使用Go语言的http包和goquery包创建了一个简单的网页爬虫。我们首先使用http包发起了GET请求,接下来使用ioutil包读取响应体的内容,并使用goquery包解析了HTML代码。这个爬虫程序可以作为你学习更高级的Go语言爬虫程序的一个很好的起点。

使用Colley爬虫

下面我们将通过一个简单的示例来演示如何使用 Colly 来实现一个简单的爬虫。我们将会爬取某个网站上的所有图片,并且将其保存到本地。

package main

import (
    "fmt"
    "github.com/gocolly/colly"
)

func main() {
    c := colly.NewCollector()

    // 在访问页面之前执行的回调函数
    c.OnRequest(func(r *colly.Request) {
        fmt.Println("Visiting", r.URL.String())
    })

    // 在访问页面之后执行的回调函数
    c.OnResponse(func(r *colly.Response) {
        fmt.Println("Visited", r.Request.URL.String())
    })

    // 在访问页面时发生错误时执行的回调函数
    c.OnError(func(r *colly.Response, err error) {
        fmt.Println("Error:", err)
    })

    // 在访问页面时发生重定向时执行的回调函数
    c.OnRedirect(func(r *colly.Response) {
        fmt.Println("Redirected to", r.Request.URL.String())
    })

    // 在访问页面时发现图片时执行的回调函数
    c.OnHTML("img", func(e *colly.HTMLElement) {
        url := e.Attr("src")
        if url != "" {
            fmt.Println("Found image:", url)
            // TODO: 下载图片并保存到本地
        }
    })
 
    // 发起访问  输入你要访问的网址
    c.Visit("https://example.com")
}

在上面的示例中,我们首先通过 colly.NewCollector() 创建了一个新的 Collector 对象。然后我们通过 c.OnRequestc.OnResponsec.OnErrorc.OnRedirect 等方法注册了一些回调函数,用于处理在访问页面时可能发生的各种情况。最后,我们通过 c.OnHTML 方法注册了一个回调函数,用于处理页面中的图片元素。

在实际使用中,我们还需要在 c.OnHTML 回调函数中下载图片并保存到本地。这里我们可以使用 Go 标准库中的 net/http 包来实现下载图片的功能。在 c.OnHTML 回调函数中,我们可以使用 http.Get 方法来下载图片,并且可以使用 os.Create 方法来创建一个新的文件,并将下载到的图片数据写入到这个文件中。

// 在访问页面时发现图片时执行的回调函数
c.OnHTML("img", func(e *colly.HTMLElement) {
    url := e.Attr("src")
    if url != "" {
        fmt.Println("Found image:", url)
        resp, err := http.Get(url)
        if err != nil {
            fmt.Println("Error:", err)
            return
        }
        defer resp.Body.Close()

        file, err := os.Create("image.jpg")
        if err != nil {
            fmt.Println("Error:", err)
            return
        }
        defer file.Close()

        io.Copy(file, resp.Body)
        fmt.Println("Image saved to", file.Name())
    }
})

在上面的代码中,我们首先使用 http.Get 方法下载了图片,并且使用 defer 关键字来确保在函数返回时关闭响应体。然后我们使用 os.Create 方法创建了一个新的文件,并且使用 defer 关键字来确保在函数返回时关闭文件。最后,我们使用 io.Copy 方法将响应体中的数据写入到文件中,并且打印出保存文件的路径。

结语

在本篇博客文章中,我们介绍了一些常用的 Go 爬虫框架,并且通过一个简单的示例演示了如何使用 goquery和colly 来实现一个简单的爬虫。当然,在实际使用中,我们还需要考虑一些其他的因素,比如如何处理反爬虫机制、如何使用代理、如何使用 Cookie 管理等问题。但是通过本文的介绍,相信大家已经对 Go 爬虫有了更深入的了解,可以在实际项目中灵活应用。文章来源地址https://www.toymoban.com/news/detail-438123.html

到了这里,关于Go 爬虫三种框架的基本使用介绍的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • Go语言项目后端使用gin框架接收前端发送的三种格式数据(form-data,json,Params)

    Go语言项目后端使用gin框架接收前端发送的三种格式数据(form-data,json,Params)

    使用gin框架的BindJSON方法,将前端的json格式数据将后端的结构体相绑定,从而获取到前端所发送的数据,并返回给前端 1.将前端发送过来的数据全部返回 2.将前端发送过来的json格式数据选择性返回   使用gin框架的PostForm方法,从而获取到前端form格式的参数 使用gin框架中的

    2024年02月01日
    浏览(215)
  • 当今网络的基本情况

    当今网络的基本情况

    目录 1 网络表示方法和网络拓扑 1.1 网络表示方法 1.2 拓扑图 1.2.1 物理拓扑图 1.2.2 逻辑拓扑图 2 常见网络类型 2.1 LAN 和 WAN 2.1.2 WAN 2.2 互联网 2.3 内部网和外联网 3 Internet连接 3.1 Internet访问技术 3.2 家庭和小型办公室 Internet 连接 3.3 企业 Internet 连接 3.4 融合网络 3.4.1 传统的独立

    2024年02月15日
    浏览(10)
  • React框架的介绍、特点、安装及基本使用流程

    React框架的介绍、特点、安装及基本使用流程

    react是由facebook前端开发团队开发和维护的js框架 react的实现功能类似VUE,但是由于国外的开发风格,导致在react上,并没有对数据渲染的步骤进行封装,需要开发者更多的使用es6的语法手动完成数据渲染,所以,代码难度比VUE高。 1.一切皆组件:在react中几乎都是使用组件进行

    2024年01月21日
    浏览(9)
  • 爬虫框架scrapy基本原理

    爬虫框架scrapy基本原理

    scrapy是python的爬虫框架,类似于django(python的web框架)。 安装: Mac、Linux 执行 pip3 install scrapy ,不存在任何问题 Windows 执行 pip3 install scrapy ,如果安装失败,执行下面步骤: (1)安装wheel(为支持通过文件安装软件): pip3 install wheel (wheel官网) (2)安装lxml: pip3 insta

    2024年02月15日
    浏览(10)
  • 爬虫:Scrapy热门爬虫框架介绍

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月13日
    浏览(12)
  • Go开始:Go基本元素介绍

    Go开始:Go基本元素介绍

    本文深入探讨了Go编程语言中的核心概念,包括标识符、、具名函数、具名值、定义类型、类型别名、包和模块管理,以及代码块和断行。这些元素是构成Go程序的基础,也是编写高质量代码的关键。 关注TechLeadCloud,分享互联网架构、云服务技术的全维度知识。作者拥

    2024年02月10日
    浏览(12)
  • 爬虫(四):Scrapy热门爬虫框架介绍

    结合自身经验和内部资料总结的Python教程,每天3-5章,最短1个月就能全方位的完成Python的学习并进行实战开发,学完了定能成为大佬!加油吧!卷起来! 全部文章请访问专栏:《Python全栈教程(0基础)》 再推荐一下最近热更的:《大厂测试高频面试题详解》 该专栏对近年

    2024年02月11日
    浏览(15)
  • 网络爬虫基本原理的介绍

    网络爬虫是一种计算机程序,它通过网络请求从不同的服务器收集和抓取信息,并存储在本地文件或数据库中。 网络爬虫的基本原理主要包含以下几个部分: 首先,选择爬行目标并获得初始URL,然后下载并解析这个URL,接着,根据提取出的新URL,继续进行重复下载和解析。

    2024年01月25日
    浏览(9)
  • Go 单元测试基本介绍

    Go 单元测试基本介绍

    目录 一、单元测试基本介绍 1.1 什么是单元测试? 1.2 如何写好单元测试 1.3 单元测试的优点 1.4 单元测试的设计原则 二、Go语言测试 2.1 Go单元测试概要 2.2 Go单元测试基本规范 2.3 一个简单例子 2.3.1 使用Goland 生成测试文件 2.3.2 运行单元测试 2.3.3 完善测试用例 2.3.5 回归测试

    2024年04月16日
    浏览(15)
  • Spring 框架入门介绍及IoC的三种注入方式

    Spring 框架入门介绍及IoC的三种注入方式

    目录 一、Spring 简介 1. 简介 2. spring 的核心模块 ⭐  二、IoC 的概念 2.1 IoC 详解 2.2 IoC的好处 2.3 谈谈你对IoC的理解 三、IoC的三种注入方式 3.1 构造方法注入 3.2 setter方法注入 3.3 接口注入(自动分配) 3.4 spring上下文与tomcat整合 3.5 总结         Spring框架 是 Java 平台的一个

    2024年02月12日
    浏览(20)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包