我正在使用科利报废一个电子商务网站。我会循环了许多产品。
下面是我的代码片段,它获取了一个副标题
c.OnXML("/html/body/div[4]/div/div[3]/div[2]/div/div[1]/div[3]/div/div/h1/1234", func(e *colly.XMLElement) {
fmt.Println(e.Text)
})
但是,并非所有产品都有副标题,因此上述XML
路径并不适用于所有情况。
当我到达一个没有副标题的产品时,我的代码崩溃并返回错误panic: expression must evaluate to a node-set
下面是我的代码:
c := colly.NewCollector()
c.OnError(func(_ *colly.Response, err error) {
log.Println("Something went wrong:", err)
})
//Sub Title
c.OnXML("/html/body/div[4]/div/div[3]/div[2]/div/div[1]/div[3]/div/div/h1/1234", func(e *colly.XMLElement) {
fmt.Println(e.Text)
})
c.OnRequest(func(r *colly.Request) {
fmt.Println("Visiting", r.URL)
})
c.Visit("https://www.lazada.vn/-i1701980654-s7563711492.html")
这就是我想要的
c.OnXML("/html/b.....v/h1/1234", func(e *colly.XMLElement) {
if no error {
fmt.Println("NO ERROR)
} else {
fmt.Println("GOT ERROR")
}
})
1条答案
按热度按时间ujv3wf0j1#
也许我知道你的代码哪里出错了。让我从最后一个开始。正如你所看到的,错误源于
parse.go
文件第473行的panic
语句。包xpath
有一个名为parseNodeTest
的方法,它执行以下检查:p.r.typ
的值为itemNumber
(28
),导致交换机进入默认分支并报错,在上述方法之前调用的方法(您可以在IDE的调用堆栈中看到它们)将文字1234
的typ
设置为该值,这会导致无效的XPath查询。你必须去掉1234
,并输入一些有效的值。如果这解决了你的问题,请告诉我,谢谢!