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" alt="LazMall">
<h1 >
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
CodePudding user response:
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
}