c.Parse(body)
c.Store(“提取的数据”)
}
在上面的示例中,我们定义了一个Crawler
结构体,其中包含了下载、解析和存储等功能。Download
方法负责从给定的URL下载网页内容,并返回字节切片。Parse
方法负责解析网页内容,提取所需的数据。Store
方法负责将提取的数据存储到本地或数据库中。Run
方法是爬虫的入口,负责调用其他功能方法来完成整个爬取流程。
3. 使用爬虫封装模块
使用封装的爬虫模块非常简单,只需实例化Crawler
结构体并调用Run
方法即可。以下是一个使用示例:
package main
import “crawler”
func main() {
c := crawler.Crawler{}
c.Run(“http://example.com”)
}
在上面的示例中,我们导入了封装的爬虫模块,实例化Crawler
结构体并调用Run
方法来启动爬虫程序。这样就完成了一个简单的爬虫任务。
4. 爬虫的进一步封装
上面的示例只是一个简单的爬虫封装模块,实际应用中可能需要更多的功能和扩展。下面是一些可以进一步封装的功能点:
并发爬取
使用Golang的并发特性,可以实现爬虫的并发执行,提高爬取效率。我们可以使用goroutine
和channel
来实现并发爬取,例如使用一个WorkPool
来控制并发数量,每个goroutine
负责一个URL的下载、解析和存储。
定时爬取
如果需要定时执行爬取任务,可以使用Golang的time
包来实现定时任务。可以创建一个定时器,在每个时间间隔内执行爬取任务。
动态配置
为了增加灵活性,可以将爬虫的配置参数进行动态化。可以使用Golang的flag
包来定义命令行参数,或者使用配置文件来配置爬虫的各项参数。
错误处理
在爬虫过程中可能会遇到网络异常、解析错误等问题,我们需要对这些错误进行恰当的处理。可以使用Golang的error
类型来表示错误,并进行适当的错误处理和日志记录。
5. 案例1:爬取图片链接
在这个案例中,我们将演示如何使用封装的爬虫模块来爬取网页中的图片链接。我们将使用goquery
库来解析HTML并提取图片链接。
首先,我们在Parse
方法中添加以下代码来解析网页并提取图片链接:
func (c *Crawler) Parse(body []byte) {
doc, err := goquery.NewDocumentFromReader(bytes.NewReader(body))
if err != nil {
log.Fatal(err)
}
doc.Find(“img”).Each(func(i int, s *goquery.Selection) {
link, exists := s.Attr(“src”)
if exists {
fmt.Println(link)
}
})
}
在上述代码中,我们使用goquery
库的NewDocumentFromReader
方法将HTML内容解析为Document
对象。然后,我们使用Find
方法和选择器img
来找到网页中的所有图片元素。然后,我们使用Attr
方法获取图片元素的src
属性值,即图片链接。最后,我们将图片链接打印出来。
接下来,我们在main
函数中添加以下代码来运行爬虫:
func main() {
crawler := NewCrawler()
crawler.Run(“https://www.example.com”)
}
这个案例将爬取https://www.example.com
网页中的所有图片链接,并将其打印出来。
6. 案例2:爬取文章标题和内容
在这个案例中,我们将使用封装的爬虫模块来爬取网页中的文章标题和内容。我们将使用goquery
库来解析HTML并提取文章标题和内容。
首先,我们在Parse
方法中添加以下代码来解析网页并提取文章标题和内容:
func (c *Crawler) Parse(body []byte) {
doc, err := goquery.NewDocumentFromReader(bytes.NewReader(body))
if err != nil {
log.Fatal(err)
}
title := doc.Find(“h1”).Text()
fmt.Println(“标题:”, title)
content := doc.Find(“div.content”).Text()
fmt.Println(“内容:”, content)
}
在上述代码中,我们使用goquery
库的NewDocumentFromReader
方法将HTML内容解析为Document
对象。然后,我们使用Find
方法和选择器h1
来找到网页中的标题元素,使用Text
方法获取标题文本,并将其打印出来。接着,我们使用Find
方法和选择器div.content
来找到网页中的内容元素,使用Text
方法获取内容文本,并将其打印出来。
接下来,我们在main
函数中添加以下代码来运行爬虫:
func main() {
crawler := NewCrawler()
crawler.Run(“https://www.example.com/article/1”)
}
这个案例将爬取https://www.example.com/article/1
网页中的文章标题和内容,并将其打印出来。
7. 案例3:爬取商品信息
在这个案例中,我们将使用封装的爬虫模块来爬取网页中的商品信息。我们将使用goquery
库来解析HTML并提取商品信息。
首先,我们定义一个Product
结构体来表示商品信息:
type Product struct {
Name string
Price string
}
然后,我们在Parse
方法中添加以下代码来解析网页并提取商品信息:
func (c *Crawler) Parse(body []byte) {
doc, err := goquery.NewDocumentFromReader(bytes.NewReader(body))
if err != nil {
log.Fatal(err)
}
doc.Find(“div.product”).Each(func(i int, s *goquery.Selection) {
name := s.Find(“h3”).Text()
price := s.Find(“span.price”).Text()
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Go语言工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Go语言全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Golang知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
续会持续更新**
如果你觉得这些内容对你有帮助,可以添加V获取:vip1024b (备注Go)
[外链图片转存中…(img-kr0fRUmc-1712967352950)]
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!