第一次接触Go, 写个小爬虫练习一下
由于平时用Python比较多, 不知道Go对比Python来说有什么区别呢
就拿贴吧来练习一下, 抓帖子里的图片
package main
import (
"fmt"
"net/http"
"io/ioutil"
"github.com/PuerkitoBio/goquery"
)
var a = 0
var url = "https://tieba.baidu.com/p/4608718475"
var isNext = true
func GetDetail(doc *goquery.Document){
// 解析详情页函数
doc.Find("img.BDE_Image[size]").Each(func(i int, s *goquery.Selection) {
_picSrc, _exist := s.Attr("src")
if (_exist) {
fmt.Println(_picSrc)
resp, err := http.Get(_picSrc)
if err != nil {
fmt.Println("访问图片出错")
}
_data ,_err2 := ioutil.ReadAll(resp.Body)
if _err2 != nil {
panic(_err2)
}
//保存到本地
ioutil.WriteFile(fmt.Sprintf("./images/20190425_%d.jpg", a), _data, 0644)
fmt.Println("图片下载成功")
a ++
}
})
}
func GetMovie(startUrl string) (bool){
fmt.Println(url)
_doc, _err := goquery.NewDocument(startUrl)
// 开始下载单页面的图片
GetDetail(_doc)
if _err != nil {
fmt.Println("下载请求错误")
}
_next, _exist := _doc.Find("span.tP+a").Attr("href")
// 组装下一页url
url = "https://tieba.baidu.com" + _next
fmt.Println(_next)
fmt.Println(_exist)
return _exist
}
func main() {
for isNext {
isNext = GetMovie(url)
//fmt.Println(url)
}
}
全部爬下来了700多张表情包,如图
虽然很简单,但是学到了不少关于Go的知识
说说遇到的坑
go get 第三方时, 对包网站golang.org的河蟹(因为是谷歌的关系),这里建议去github上去clone下来到src下面, 或者拿梯子下载,都没问题
.
写完之后发现区别还是有点大, 作为一个菜鸡还需要加大力度跟各位大佬学习,由于是新手,要总结的地方还有很多
.待续,以上~