为了账号安全,请及时绑定邮箱和手机立即绑定

GoQuery 选择提取器不起作用

GoQuery 选择提取器不起作用

Go
收到一只叮咚 2021-11-15 20:40:36
我正在尝试从 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>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)    }有人可以指出我在这里可能缺少什么吗?
查看完整描述

1 回答

?
眼眸繁星

TA贡献1873条经验 获得超9个赞

li := pageIterator.Find("li a")实际上是一个元素序列,但你只需要第一个元素的属性。在这方面,它有点像 jquery。您真正想要做的是遍历所有链接,并Each在这里成为您的朋友。我发现它比用 Eq 迭代要容易得多。


这个片段对我有用:


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)

            }

        })

    })

}


查看完整回答
反对 回复 2021-11-15
  • 1 回答
  • 0 关注
  • 194 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信