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
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()
}
运行结果:
这个爬虫将搜索词为Wiki的第一页搜索结果的文字和url爬取了下来
当然,如果同学们不畏艰险,可以用Go自带的net/http包,并自己实现HTML文本元素匹配。