Go语言 简单爬虫

goquery : https://github.com/PuerkitoBio/goquery


首先,在这里介绍使用一个叫goquery的包,这个是go语言写爬虫非常好用的一个包,包含了网络连接和元素处理等。

先来试试go get github.com/Puerkito/goquery

如何从github.com下载与配置包已经在之前的文档中解释: Git指令使用

现在发现,这里无法get这个包,提示的error无外乎connection refused或者timeout。这就是被墙了,即使在浏览器中可以打开github.com/Puerkito/goquery :打开链接

下载安装步骤:

1. 我们采用直接暴力下载解压的方式,从刚刚上面的网址点击 Clone or download,选择download zip

Go语言 简单爬虫_第1张图片

2. 下载后拖到桌面,解压,rename一下,将goquery-master改为goquery

3. 然后将这个文件夹移动到/home/username/go/src/github.com下(如果没有github.com文件夹,先mkdir)

4. 在/home/username/go/src目录下,尝试go install github.com/PuerkitoBio/goquery

5. 提示 unrecognized import path "golang.org/x/net/html", 这是goquery依赖的包,需要额外的下载安装。可惜,这又是一个被墙的包。

6. 采取相同的方式,直接下载克隆这个包:打开链接

7. 重命名为net,移动到/home/username/go/src/golang.org/x文件夹下,再cd到上层的src文件夹。

8. 输入指令 go install golang.org/x/net,安装成功。

9. 再cd到src文件夹,输入go install  github.com/PuerkitoBio/goquery ,安装成功

简单应用:

推荐文档:

小实例:https://studygolang.com/articles/5375

goquery中的各种调用解释:http://blog.csdn.net/skh2015java/article/details/72998418

goquery较为详细的解释:https://www.itlipeng.cn/2017/04/25/goquery-%E6%96%87%E6%A1%A3/

爬取百度一页搜索结果:

package main

import(
	"fmt"
	"strings"
	"github.com/PuerkitoBio/goquery"
)

func checkErr(err error){
	if err!=nil{
		fmt.Println(err)
	}
}
func main(){
	opening,err := goquery.NewDocument("https://baidu.com/s?wd=Wiki")
	checkErr(err)
	ele := opening.Find("div").Find(".result").Find("h3")
	defer ele.Each(func(i int, content *goquery.Selection) {
		fmt.Println()
		a := content.Text()
		a = strings.Replace(a," ","",-1)
		a = strings.Replace(a,"\n","",-1)
		fmt.Print(a,"    ")
		b,_ := content.Find("a").Attr("href")
		fmt.Println(b)
	})
	ele1 := opening.Find("div").Find(".result-op").Find("h3")
	defer ele1.Each(func(i int, content *goquery.Selection) {
		fmt.Println()
		a := content.Text()
		a = strings.Replace(a," ","",-1)
		a = strings.Replace(a,"\n","",-1)
		fmt.Print(a,"    ")
		b,_ := content.Find("a").Attr("href")
		fmt.Println(b)
	})
	defer fmt.Println()
}

运行结果:

 Go语言 简单爬虫_第2张图片

这个爬虫将搜索词为Wiki的第一页搜索结果的文字和url爬取了下来

当然,如果同学们不畏艰险,可以用Go自带的net/http包,并自己实现HTML文本元素匹配。

你可能感兴趣的:(Go语言 简单爬虫)