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)

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

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

    目录 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日
    浏览(39)
  • React框架的介绍、特点、安装及基本使用流程

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

    2024年01月21日
    浏览(42)
  • 爬虫框架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日
    浏览(51)
  • 爬虫:Scrapy热门爬虫框架介绍

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

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

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

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

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

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

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

    2024年01月25日
    浏览(41)
  • 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日
    浏览(42)
  • 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日
    浏览(48)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包