Golang scrape 如何定义匹配项

Golang scrape how to define matches

我尝试使用这个 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)

但是没用。

固定码:

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 属性。