Golang抓住了如何定义匹配

问题描述 投票:-1回答:1

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

但它不起作用。

go scrape
1个回答
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属性。

© www.soinside.com 2019 - 2024. All rights reserved.