引言
随着互联网的发展,信息爆炸的时代已经到来。但是我们需要的信息往往没有那么显眼的入口,这时候我们就需要爬虫来帮助我们把信息爬下来。那么,在这篇文章里,我将会带领大家从零开始学习如何使用Go语言开发一个爬虫,带大家一步一步走入爬虫的世界。
第一步:获取对应网站的HTML源码
首先,我们需要了解一下爬虫的基本原理。所谓爬虫,就是在互联网上按照一定的规则抓取信息的自动化程序。其实,爬虫的工作流程并不复杂,它的主要步骤有两个:
- 获取对应网站的HTML源码
- 解析HTML代码,提取出我们需要的信息。
那么,我们先来看看如何获取对应网站的HTML源码。在Go语言中,我们可以使用http包提供的Get()函数来获取对应网站的HTML源码。Get()函数的使用非常简单,我们只需要向它传递目标网站的URL,它就会返回一个响应体。
接下来,我们通过下面的代码来获取百度首页的HTML源码:
package main
import ( "fmt" "net/http" )
func main() { resp, err := http.Get("https://www.baidu.com")
if err != nil { fmt.Println("request failed")
return
}
defer resp.Body.Close()
if resp.StatusCode == 200 { '
bodyBytes, err2 := ioutil.ReadAll(resp.Body)
if err2 != nil { fmt.Println("read body failed")
return
}
bodyString := string(bodyBytes)
fmt.Println(bodyString)
} else {
fmt.Println("response status code: ", resp.StatusCode)
}
}
可以看到,我们使用了http包提供的Get()来获取对应网站的HTML源码,并对响应体进行了简单的处理。运行程序后,我们就可以从控制台上看到百度首页的HTML源码了。
第二步:解析HTML源码
接下来,我们需要解析HTML源码,提取出我们需要的信息。在Go语言中,我们可以使用第三方包来辅助我们完成这个任务。这里,我将使用goquery这个第三方包,在获取HTML源码后,解析响应体中的HTML,并提取页面上的标题和链接。
首先,我们需要在Go语言中安装goquery包。在CMD中输入下面的命令就可以:
$ go get github.com/PuerkitoBio/goquery
安装完包之后,我们就可以在代码中引用它了。
package main
import ( "fmt" "io/ioutil" "net/http" "github.com/PuerkitoBio/goquery" )
func main() { resp, err := http.Get("https://www.baidu.com")
if err != nil { fmt.Println("request failed")
return
}
defer resp.Body.Close()
if resp.StatusCode == 200 {
doc, err2 := goquery.NewDocumentFromReader(resp.Body)
if err2 != nil { fmt.Println("parse html failed")
return
}
title := doc.Find("title").Text()
fmt.Println(title)
doc.Find("a").Each(func(i int, s *goquery.Selection) {
link, _ := s.Attr("href")
fmt.Println(link) })
} else {
fmt.Println("response status code: ", resp.StatusCode)
}
}
可以看到,我们使用了goquery包中提供的NewDocumentFromReader()方法,将响应体中的HTML解析成一个goquery的Document对象。之后,我们就可以使用类似于jQuery的语法来操作我们的Document对象,获取页面上的元素信息了。在上面的代码中,我们获取到了百度首页的标题和链接。
第三步:实现自己的爬虫
通过上面的代码,我们已经可以获取到对应网站的HTML源码,并对HTML代码进行了解析。那么,我们就可以开始自己的爬虫实战了!
首先,我们来看看如何爬取豆瓣电影Top250上的电影信息。我们需要爬取的信息包括电影名称、评分和电影链接。具体实现代码如下:
package main
import ( "fmt" "github.com/PuerkitoBio/goquery" "net/http" )
func main() {
url := "https://movie.douban.com/top250"
resp, err := http.Get(url)
if err != nil {
fmt.Println("request failed")
return
}
defer resp.Body.Close()
if resp.StatusCode == 200 {
doc, err2 := goquery.NewDocumentFromReader(resp.Body)
if err2 != nil {
fmt.Println("parse html failed")
return
}
doc.Find(".grid_view .item").Each(func(i int, s *goquery.Selection) {
title := s.Find(".title").Text()
rate := s.Find(".rating_num").Text()
link, _ := s.Find(".hd a").Attr("href")
fmt.Printf("Top %d: %s, 评分:%s, 链接:%s\n", i+1, title, rate, link)
})
} else {
fmt.Println("response status code: ", resp.StatusCode)
}
}
这段代码通过对豆瓣电影Top250页面的解析,获取了页面上每一部电影的名称、评分和电影链接。运行程序之后,我们就可以在控制台上看到我们爬取到的数据了。
当然,爬取豆瓣电影Top250只是一个小小的实例,我们可以根据不同的需求,去设计一个更加灵活的爬虫。只要我们遵守相关法律法规,严格按照爬虫的道德规范进行操作,我们就可以在爬虫的世界里获取到更加丰富的信息了。
最后,我希望大家能够在开发爬虫的过程中,保持一颗好奇心和谨慎的态度,探索这个充满奇妙的世界。
我整理了编程语言Python的学习资料,拿出来和大家分享,有需要的朋友可以扫描下方二维码进行领取哦