如何在Go语言中获取属性href value的值

如何在Go语言中获取属性href value的值,go,goquery,Go,Goquery,我想从html内容中解析锚链接。 /*我的HTML内容示例 <a class="productnamecolor colors_productname" href="http://www.cccxcxc.com/Nautical-Bubble-Romper-p/s15brpnt03.htm">*/ <a class="productnamecolor colors_productname" href="http://www.dewewe.com/Nautical-B

我想从html内容中解析锚链接。 /*我的HTML内容示例

<a class="productnamecolor colors_productname" href="http://www.cccxcxc.com/Nautical-Bubble-Romper-p/s15brpnt03.htm">*/
      <a class="productnamecolor colors_productname" href="http://www.dewewe.com/Nautical-Bubble-Romper-p/erewrwer.htm">
    <a class="productnamecolor colors_productname" href="http://www.sdsddsd.com/Nautical-Bubble-Romper-p/dsadadasd.htm"> 
*/
*/ 主播有href,我想得到href的值。但这给了我错误

错误:单值上下文中的多值s.Attr()

package main

    import (
      "fmt"
      "log"

      "github.com/PuerkitoBio/goquery"
    )

    func ExampleScrape() {
      doc, err := goquery.NewDocument("http://www.myurl.com/category-s/1828.htm") 
      if err != nil {
        log.Fatal(err)
      }

    /* **my sample html after http open** <a class="productnamecolor colors_productname" href="http://www.cccxcxc.com/Nautical-Bubble-Romper-p/s15brpnt03.htm">*/
      <a class="productnamecolor colors_productname" href="http://www.dewewe.com/Nautical-Bubble-Romper-p/erewrwer.htm">
    <a class="productnamecolor colors_productname" href="http://www.sdsddsd.com/Nautical-Bubble-Romper-p/dsadadasd.htm"> ***/

    doc.Find("table.v65-productDisplay a.productnamecolor").Each(func(i int, s *goquery.Selection) {
        band := s.Attr("href") // here i want to get attribute " href " value. this is not working here.
        fmt.Printf(band)
      })
    }

    func main() {
      ExampleScrape()
    }
主程序包
进口(
“fmt”
“日志”
“github.com/purkitobio/goquery”
)
func examplesrave(){
文档,错误:=goquery.NewDocument(“http://www.myurl.com/category-s/1828.htm") 
如果错误!=零{
log.Fatal(错误)
}
/***http打开后的我的html示例***/
***/
doc.Find(“table.v65-productDisplay a.productnamecolor”)。每个(func(i int,s*goquery.Selection){
band:=s.Attr(“href”)//这里我想获取属性“href”的值。这里不起作用。
fmt.Printf(波段)
})
}
func main(){
示例scrape()
}
返回两个值:属性值和一个布尔值,说明属性是否存在(如果为false,属性值将为空)

Go不喜欢忽略多个返回值,因此必须将代码更改为以下内容:

doc.Find("table.v65-productDisplay a.productnamecolor").Each(func(i int, s *goquery.Selection) {
    band, ok := s.Attr("href")
    if ok {
        fmt.Printf(band)
    }
})
您也可以使用该软件包

主程序包
进口(
“fmt”
“日志”
“字符串”
“golang.org/x/net/html”
)
func main(){
s:=`*/
`
doc,err:=html.Parse(strings.NewReader)
如果错误!=零{
log.Fatal(错误)
}
var f func(*html.Node)
f=func(n*html.Node){
如果n.Type==html.ElementNode&&n.Data==a{
对于u,a:=范围n.属性{
如果a.Key==“href”{
格式打印LN(a.Val)
打破
}
}
}
对于c:=n.FirstChild;c!=nil;c=c.NextSibling{
f(c)
}
}
f(文件)
}
//输出
// http://www.cccxcxc.com/Nautical-Bubble-Romper-p/s15brpnt03.htm
// http://www.dewewe.com/Nautical-Bubble-Romper-p/erewrwer.htm
// http://www.sdsddsd.com/Nautical-Bubble-Romper-p/dsadadasd.htm

希望这对其他人有所帮助。

你应该用句子和段落清楚地提问,而不是依赖代码块中的标题和注释。相关/有用吗?@DaveC我也尝试过使用此软件包,但问题是它没有提供css选择器。@puzzdboy这是什么意思?您可以将每个属性/标记与该包一起使用。你只是不懂
doc.Find(“tag.classattr”)
的语法,尽管一旦你熟悉了这个包,编写你自己的函数就很容易了。。Thanx先生,
package main

import (
    "fmt"
    "log"
    "strings"

    "golang.org/x/net/html"
)

func main() {
    s := `<a class="productnamecolor colors_productname" href="http://www.cccxcxc.com/Nautical-Bubble-Romper-p/s15brpnt03.htm">*/
      <a class="productnamecolor colors_productname" href="http://www.dewewe.com/Nautical-Bubble-Romper-p/erewrwer.htm">
    <a class="productnamecolor colors_productname" href="http://www.sdsddsd.com/Nautical-Bubble-Romper-p/dsadadasd.htm">`
    doc, err := html.Parse(strings.NewReader(s))
    if err != nil {
        log.Fatal(err)
    }
    var f func(*html.Node)
    f = func(n *html.Node) {
        if n.Type == html.ElementNode && n.Data == "a" {
            for _, a := range n.Attr {
                if a.Key == "href" {
                    fmt.Println(a.Val)
                    break
                }
            }
        }
        for c := n.FirstChild; c != nil; c = c.NextSibling {
            f(c)
        }
    }
    f(doc)
}
// outputs
// http://www.cccxcxc.com/Nautical-Bubble-Romper-p/s15brpnt03.htm
// http://www.dewewe.com/Nautical-Bubble-Romper-p/erewrwer.htm
// http://www.sdsddsd.com/Nautical-Bubble-Romper-p/dsadadasd.htm