package main
import (
"fmt"
"strings"
"time"
"github.com/PuerkitoBio/goquery"
"github.com/gocolly/colly"
func main() {
c := colly.NewCollector(
colly.AllowedDomains("emojipedia.org"),
c.OnHTML("article", func(e *colly.HTMLElement) {
isEmojiPage := false
metaTags := e.DOM.ParentsUntil("~").Find("meta")
metaTags.Each(func(_ int, s *goquery.Selection) {
property, _ := s.Attr("property")
if strings.EqualFold(property, "og:type") {
content, _ := s.Attr("content")
isEmojiPage = strings.EqualFold(content, "article")
if isEmojiPage {
fmt.Println("Emoji: ", e.DOM.Find("h1").Text())
fmt.Println(
"Description: ",
e.DOM.Find(".description").Find("p").Text())
c.OnHTML("a[href]", func(e *colly.HTMLElement) {
link := e.Attr("href")
c.Visit(e.Request.AbsoluteURL(link))
c.Limit(&colly.LimitRule{
DomainGlob: "*",
RandomDelay: 1 * time.Second,
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL.String())
c.Visit("https://emojipedia.org")
就是这样! 编译和运行后,您将看到爬虫访问多个页面,并在它偶然发现到表情符号页面时打印出表情符号名称/描述。
显然,这只是一个开始。 可以轻松地将这些数据保存在图形结构中,或者将Web解析器/ scraper暴露为不具有公共API的站点的独特包。