gogo-colly

Colly - How to get the value of a child attribute?


Here is the sample page I been working on https://www.lazada.vn/-i1701980654-s7563711492.html

Here is the element I want to get (the product title)

...
<div>
   <img src="https://lzd-img-global.slatic.net/g/tps/imgextra/i1/O1CN01JUOYif22N3Uu7JX4R_!!6000000007107-2-tps-162-48.png" class="pdp-mod-product-badge" alt="LazMall">
    <h1 class="pdp-mod-product-badge-title">
     Yierku 【Free Shipping Miễn phí vận chuyển】Giày nam mùa thu và mùa đông giày thường xu hướng nam thể thao tất cả các trận đấu giày da tăng chiều cao giày nam
    </h1>
</div>
...

I want to get the text value between the <h1> element which is Yierku 【Free Shipping Miễn phí vận chuyển】Giày n....

Here is what I have tried so far

    c := colly.NewCollector()
    c.OnError(func(_ *colly.Response, err error) {
        log.Println("Something went wrong:", err)
    })
    c.OnXML("/html/body", func(e *colly.XMLElement) {
        child := e.ChildAttrs("div[4]/div/div[3]/div[2]/div/div[1]/div[3]/div/div/h1", "class")
        fmt.Println(child)
        //fmt.Println(child)
    })

It gives the response of pdp-mod-product-badge-title

When I tried to change it into

child := e.ChildAttrs("div[4]/div/div[3]/div[2]/div/div[1]/div[3]/div/div/h1", "text")

It does not give me any result


Solution

  • Use func (*XMLElement) ChildText instead.

    package main
    
    import (
        "fmt"
    
        "github.com/gocolly/colly/v2"
    )
    
    func main() {
        c := colly.NewCollector()
        c.OnError(func(_ *colly.Response, err error) {
            fmt.Println("Something went wrong:", err)
        })
        c.OnXML("/html/body", func(e *colly.XMLElement) {
            child := e.ChildText("div[4]/div/div[3]/div[2]/div/div[1]/div[3]/div/div/h1")
            fmt.Println(child)
        })
        c.Visit("https://www.lazada.vn/-i1701980654-s7563711492.html")
        // Output:
        // Yierku 【Free Shipping Miễn phí vận chuyển】Giày nam mùa thu và mùa đông giày thường xu hướng nam thể thao tất cả các trận đấu giày da tăng chiều cao giày nam
    }