使用Go解析虚拟货币信息生成一个接口

定义结构体

表示某个货币信息


type CoinInfo struct {
	Rank string `json:"rank"`
	Name string `json:"name"`
	CurrentCount string `json:"current_count"`
	CurrentPrice string `json:"current_price"`
	CurrentMark string `json:"current_mark"`
	Count string `json:"count"`
	Change string `json:"change"`

}

抓取和解析信息

返回所有的货币信息,是一个货币信息数组


func queryCoinInfo() []CoinInfo {
	doc, err := goquery.NewDocument("https://www.feixiaohao.com/")

	if err != nil {
		fmt.Print(err.Error())
		return nil
	}

	var coinInfos [] CoinInfo
	//解析document
	doc.Find("#table tbody tr").Each(func(i int, selection *goquery.Selection) {
		var coinInfo CoinInfo
		Rank := selection.Find("td").Eq(0).Text()
		CoinName := strings.TrimSpace(selection.Find("td").Eq(1).Text())
		CurrentCount := selection.Find("td").Eq(2).Text()
		CurrentPrice := selection.Find("td").Eq(3).Text()
		CurrentMark := selection.Find("td").Eq(4).Text()
		Count := selection.Find("td").Eq(5).Text()
		Change := strings.TrimSpace(selection.Find("td").Eq(6).Text())
		//生成一个对象
		coinInfo = CoinInfo{
			Rank:Rank,
			Name:CoinName,
			CurrentCount:CurrentCount,
			CurrentPrice:CurrentPrice,
			CurrentMark:CurrentMark,
			Count:Count,
			Change:Change,
		}
		//添加每一个对象到数组中
		coinInfos = append(coinInfos, coinInfo)

	})

	return coinInfos
}

接口生成

使用gin监听一个路由,然后生成接口


func main() {

	data := queryCoinInfo()

	r := gin.Default()
	//使用gin router监听get
	r.GET("/", func(context *gin.Context) {
		context.JSON(200, &data)
	})

	r.Run(":8080")
}

依赖

别忘了安装依赖哦


go get github.com/PuerkitoBio/goquery
go get github.com/gin-gonic/gin

最后

大概的结果是这样的

[
  {
    "rank": "1",
    "name": "BTC-比特币",
    "current_count": "¥8,113亿",
    "current_price": "¥46,833",
    "current_mark": "1,732万",
    "count": "¥3,729,231万",
    "change": "6.48%"
  },
  {
    "rank": "2",
    "name": "ETH-以太坊",
    "current_count": "¥1,535亿",
    "current_price": "¥1,496",
    "current_mark": "10,258万",
    "count": "¥1,581,542万",
    "change": "6.72%"
  }
  //...
]

上文就是一个简易的爬虫示例,主要使用的是goquery和gin,你学会了吗。