1

I am attempting to extract the target attribute and add to a slice from the HTML snippet

<div class="pagination pagination-responsive">
      <ul class="list-unstyled"> 
          <li class="active">
             <a rel="start" target="1" href="/s/Cambridge--MA--United-States">1</a>
          </li> 
          <li>
             <a rel="next" target="2" href="/s/Cambridge--MA--United-States?page=2">2</a>
          </li> 
          <li>
              <a target="3" href="/s/Cambridge--MA--United-States?page=3">3</a>
          </li> 
          <li class="gap"><span class="gap">&hellip;</span>
          </li> 
          <li>
            <a target="17" href="/s/Cambridge--MA--United-States?page=17">17</a>
          </li> 
          <li class="next next_page"><a target="2" rel="next" href="/s/Cambridge--MA--United-States?page=2">
          <span class="screen-reader-only">Next</span><i class="icon icon-caret-right"></i></a>
          </li>
        </ul>
        </div>
    </div>

pageCounts := doc.Find(".pagination-responsive .list-unstyled")
    for page := range pageCounts.Nodes {
        pageIterator := pageCounts.Eq(page)
        li := pageIterator.Find("li a")
        href, _ := li.Attr("target")
        fmt.Println(href)
    }

Can someone please indicate what I might be missing here?

captncraig
  • 22,118
  • 17
  • 108
  • 151
user2780187
  • 677
  • 7
  • 16

1 Answers1

3

li := pageIterator.Find("li a") is actually a sequence of elements, but you only take the attr of the first one. It is kinda like jquery in this regard. What you actually want to do is iterate over all links, and Each is going to be your friend here. I find it much easier than iterating with Eq.

This snippet works for me:

var html = `
<div class="pagination pagination-responsive">
      <ul class="list-unstyled"> 
          <li class="active">
             <a rel="start" target="1" href="/s/Cambridge--MA--United-States">1</a>
          </li> 
          <li>
             <a rel="next" target="2" href="/s/Cambridge--MA--United-States?page=2">2</a>
          </li> 
          <li>
              <a target="3" href="/s/Cambridge--MA--United-States?page=3">3</a>
          </li> 
          <li class="gap"><span class="gap">&hellip;</span>
          </li> 
          <li>
            <a target="17" href="/s/Cambridge--MA--United-States?page=17">17</a>
          </li> 
          <li class="next next_page"><a target="2" rel="next" href="/s/Cambridge--MA--United-States?page=2">
          <span class="screen-reader-only">Next</span><i class="icon icon-caret-right"></i></a>
          </li>
        </ul>
        </div>
    </div>

`

func main() {
    doc, err := goquery.NewDocumentFromReader(strings.NewReader(html))
    pageCounts := doc.Find(".pagination-responsive .list-unstyled")
    pageCounts.Each(func(_ int, ul *goquery.Selection) {
        links := ul.Find("li a")
        links.Each(func(_ int, li *goquery.Selection) {
            if val, ok := li.Attr("target"); ok {
                fmt.Println(val)
            }
        })
    })
}
captncraig
  • 22,118
  • 17
  • 108
  • 151