如何在Go语言中获取属性href value的值
我想从html内容中解析锚链接。 /*我的HTML内容示例如何在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
<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