Go 如何正确使用选择器

Go 如何正确使用选择器,go,web-scraping,web-crawler,go-colly,Go,Web Scraping,Web Crawler,Go Colly,我正在编写一个爬虫程序来从一些页面检索一些数据,如何构建它的逻辑对我来说非常清楚,但我对如何正确使用选择器感到非常困惑 我想用colly获得一些新闻的标题,我去了页面,检查了我想提取信息的标题->点击了检查->复制选择器 选择器是 正文>div.glb-grid>main>div.row.content-head.non-featured>div.title>h1 如何将其正确地放在这行代码中 detailCollector.OnHTML("body > div.glb-gri

我正在编写一个爬虫程序来从一些页面检索一些数据,如何构建它的逻辑对我来说非常清楚,但我对如何正确使用选择器感到非常困惑

我想用colly获得一些新闻的标题,我去了页面,检查了我想提取信息的标题->点击了检查->复制选择器

选择器是

正文>div.glb-grid>main>div.row.content-head.non-featured>div.title>h1

如何将其正确地放在这行代码中

detailCollector.OnHTML("body >  div.glb-grid > main > div.row.content-head.non-featured > div.title > h1", func(element *colly.HTMLElement) {
    fmt.Println(element.Text)

})

如何以colly能够理解的方式正确解析此选择器?我在colly文档中找不到与此相关的任何内容。

选择器不是colly特有的。它正在使用的查找功能:

doc.Find(cc.Selector).Each(func(_ int, s *goquery.Selection)
但您提供的示例表示CSS选择器。因此,您可以在此处找到标准中的最终参考:

但是该特定网页似乎不包含您在上面寻找的选择器

您提供的示例非常具体,这可能就是它不匹配任何内容的原因。将其分解如下:

body >  div.glb-grid > main > div.row.content-head.non-featured > div.title > h1
查找一个“h1”元素,它是包含title的类列表的div元素的子元素,它本身是包含main子元素的所有“row”、“content head”、“non-featured”的类列表的div元素的子元素,它是包含body元素子元素的“glb grid”的类列表的div元素的子元素

将其与更简单但更通用的选择器“h1”进行对比,后者只生成网页标题,因为它似乎是文档中唯一的“h1”元素,这可能解释了您的困惑

<h1 class="header-title"> 
<div class="header-title-content">
<a class="header-editoria--link" href="https://g1.globo.com/economia/">Economia</a>
</div>
</h1>

这使用了一个简单的选择器,它选择所有具有“提要链接”类的HTML元素,该类似乎包含该页面的所有标题。在本例中,我提取了URL以及相应的标题,但这只是简单的说明,如果您不需要,您可以忽略它们。

谢谢您,Otto,您的示例对我帮助很大。
package main

import (
    "fmt"

    "github.com/gocolly/colly"
)

func main() {
    headlines := make(map[string]string)
    c := colly.NewCollector()
    c.OnHTML(".feed-post-link", func(e *colly.HTMLElement) {
        headlines[e.Text] = e.Attr("href")
    })

    c.Visit("https://g1.globo.com/economia")
    for hl, url := range headlines {
        fmt.Printf("'%v' - (%v)\n", hl, url)
    }
}