使用goquery提取元描述字段

问题描述 投票:0回答:3

我正在使用 goquery 包从网页中提取信息。请参阅下面我的代码。运行该函数后的结果是:

Description field: text/html; charset=iso-8859-15
Description field: width=device-width
Description field: THIS IS THE TEXT I WANT TO EXTRACT

我已经快到了,但是我只想获取名称==“描述”的元字段。不幸的是,我不知道如何将这个额外的条件添加到我的代码中。

func ExampleScrapeDescription() {
    htmlCode :=
        `<!doctype html>
<html lang="NL">
    <head>
        <meta http-equiv="content-type" content="text/html; charset=iso-8859-15">
        <meta name="viewport" content="width=device-width">
        <meta name="description" content="THIS IS THE TEXT I WANT TO EXTRACT">
        <title>page title</title>
    </head>
    <body class="fixedHeader">
        page body
    </body>
</html>`

    doc, err := goquery.NewDocumentFromReader(strings.NewReader((htmlCode)))
    if err != nil {
        log.Fatal(err)
    }

    doc.Find("meta").Each(func(i int, s *goquery.Selection) {
        description, _ := s.Attr("content")
        fmt.Printf("Description field: %s\n", description)
    })
}
go extract meta goquery
3个回答
11
投票

只需检查

name
属性的值是否与
"description"
匹配:

doc.Find("meta").Each(func(i int, s *goquery.Selection) {
    if name, _ := s.Attr("name"); name == "description" {
        description, _ := s.Attr("content")
        fmt.Printf("Description field: %s\n", description)
    }
})

您可能希望以不区分大小写的方式比较

name
属性的值,为此您可以使用
strings.EqualFold()
:

if name, _ := s.Attr("name"); strings.EqualFold(name, "description") {
    // proceed to extract and use the content of description
}

3
投票
    attr, _ := doc.Find("meta[name='description']").Attr("content")

0
投票

扩展斯蒂芬的回答。如果您只想要元描述和可选文本(如果不存在),这将起作用

text := doc.Find("meta[name='description']").AttrOr("content","this will 
be printed if meta description is not present.")

我经常使用这个,但只是将函数

AttrOr
的第二个参数保留为空字符串

text := doc.Find("meta[name='description']").AttrOr("content","")
© www.soinside.com 2019 - 2024. All rights reserved.