Golang抓住了如何定义匹配

时间:2017-12-17 04:39:24

标签: go scrape

我尝试使用此golang package来抓取网站图片。

这是我需要抓取的html节点。

<ul class="list clearfix">
 <li> 
     <div>
          <a href=www.example.com/asda">
                     <img src="..sadsada./ssa/3.jpg">
         </a>
      </div>
   </li>
 <li> 
     <div>
          <a href=www.example.comsdsds/sds">
                     <img srr="..sadsada./ssa/2.jpg">
         </a>
      </div>
   </li>
 <li> 
     <div>
          <a href=www.example.com/sdds">
                     <img src="..sadsada./ssa/1.jpg">
         </a>
      </div>
   </li>
  .......
</ul>

如何获取图像src?

这是我试过的比赛:

matcher := func(n *html.Node) bool {

        if n.DataAtom == atom.A && n.Parent != nil && n.Parent.Parent != nil && n.Parent.Parent.Parent != nil && n.Parent.Parent.Parent.Parent != nil {

            return scrape.Attr(n.Parent.Parent.Parent.Parent, "class") == "list clearfix"
        }
        return false
    }

    images := scrape.FindAll(root, matcher)

但它不起作用。

1 个答案:

答案 0 :(得分:0)

固定代码:

matcher := func(n *html.Node) bool {
    if n.Data == "img" && // Is img tag
        n.Parent != nil && // Parent exists
        n.Parent.DataAtom == atom.A && // Parent is <a>
        n.Parent.Parent != nil && // Parent's Parent exists (div)
        n.Parent.Parent.Parent != nil && // Parent's Parent's Parent exists (li)
        n.Parent.Parent.Parent.Parent != nil { // Parent's Parent's Parent's Parent exists (ul)
        return scrape.Attr(n.Parent.Parent.Parent.Parent, "class") == "list clearfix"
    }
    return false
}

images := scrape.FindAll(root, matcher)
for i, img := range images {
    src := scrape.Attr(img, "src")
    fmt.Printf("Image %d src=%s\n", i, src)
}

我刚修改了您的matcher功能来解决您遇到的问题。

另请注意,您问题中的HTML无效。有一些遗失"以及误导src属性。