Go-Colly爬虫仅返回第一页数据,求助排查异步问题
Colly爬虫仅返回第一页结果的解决方法
你的问题核心是Colly的异步执行机制:调用c.Visit(searchUrl)后,程序会立刻继续执行return products,但此时后续页面的爬取任务还在后台异步运行,products只收集了第一页的数据就被返回了。
解决步骤:
1. 等待所有异步请求完成
在c.Visit(searchUrl)之后调用c.Wait(),让Collector阻塞直到所有请求(包括下一页的请求)全部完成:
c.Visit(searchUrl) // 等待所有爬取任务结束 c.Wait() return products
2. 修复结构体字段的访问权限
你的Product结构体字段都是小写,属于包内私有字段,main包无法访问这些字段,打印时会显示空结构。需要将字段名改为首字母大写(导出字段):
修改product.go:
package scraper type Product struct { Name string FullPrice string Link string }
同时对应修改scraper.go中创建Product的代码:
product := Product{ Name: h.ChildText(s.name), FullPrice: priceReplacer.Replace(fullPrice), Link: fmt.Sprintf("%s%s", baseUrl, h.ChildAttr(s.link, "href")), }
验证修改效果
完成上述修改后,程序会等待所有页面爬取完成再返回结果,同时main包能正确读取并打印所有商品数据。
内容的提问来源于stack exchange,提问作者Antonio Costa
相关产品推荐
相关产品推荐

