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">…</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?
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">…</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)
}
})
})
}