golang 每日一练 使用goquery简单爬取大众点评

golang 每日一练 使用goquery简单爬取大众点评

go 语言做服务器端开发,有时候需要解析 HTML 文件,比如抓取网站内容、写一个爬虫等。这时候如果有一个类似 jQuery 的库可以使用,操作 DOM 会很方便,而且,上手也会很快。goquery 就可以实现类似效果


首先我们下载源码

go get github.com/PuerkitoBio/goquery 


下面实现源码:

package main

import (
"github.com/PuerkitoBio/goquery"
      "log"
      "fmt"
      "encoding/json"
)

/*
 爬取大众点评网站
*/

var detailUrl = "http://www.dianping.com/shop/32489357"

type dianpingInfo struct {
Title string
      Comment_count string //评论数
      Per string  //人均
      Flavor string  //口味
      Env string //环境
      Service string //服务
      Address string
      Phone string
}

func detailPage(url string) *dianpingInfo {
doc,err := goquery.NewDocument(url)
if err != nil {
log.Println("抓取失败 URL:",url)
return new(dianpingInfo)
}

info := doc.Find("div#basic-info")
title := info.Find("div.shop-name").Text()
comment_count := info.Find("div#reviewCount").Text()
per := info.Find("span#avgPriceTitle").Text()
//遍历 item
      ret := info.Find("span#comment_score .item").Map(func(i int, s *goquery.Selection) string {
tmp := s.Text()
return tmp
})

address := info.Find("div.expand-info").Text()
phone := info.Find("p.tel .info-name").Next().Text()
dp := dianpingInfo{Title:title,Comment_count:comment_count,
             Per:per,Flavor:ret[0],Env:ret[1],Service:ret[2],
             Address:address,Phone:phone}
return &dp
}

func main() {
dp := detailPage(detailUrl)
str,err := json.Marshal(dp)
if err != nil {
log.Println(err)
}

fmt.Println(string(str))
}
在线交流