如何用Golang爬取特定网站卖家名称?解决CSV文件为空问题
问题分析与修复方案
核心问题1:AllowedDomains参数错误
colly.NewCollector里的colly.AllowedDomains接收的是纯域名,不能带https://前缀,你的代码里传了"https://www.olx.ro/",这会导致Colly直接拒绝访问目标页面,跳过解析逻辑,最终CSV文件为空。
核心问题2:CSS选择器失效
OLX的页面类名是动态生成的,你用的.css-1fp4ipz已经失效。当前目标页面的卖家名称(Ionut)所在的元素结构为:
- 父元素类名为
.css-1lcz6o7 - 卖家名称在该元素下的
h4.css-1wxaaza标签中
额外优化:错误捕获与反爬规避
- 必须捕获
writer.Write的错误,避免写入失败无提示 - 添加User-Agent模拟浏览器请求,防止被OLX的反爬机制拦截
修改后的完整代码
package main import ( "encoding/csv" "fmt" "log" "os" "path/filepath" "github.com/gocolly/colly" ) func main() { // 设置存储数据的文件路径 fName := filepath.Join("D:\\", "go projects", "cwst go", "CWST-GO", "target folder", "index.csv") file, err := os.Create(fName) if err != nil { log.Fatalf("无法创建文件,错误:%q", err) } defer file.Close() // 初始化CSV写入器 writer := csv.NewWriter(file) defer writer.Flush() // 初始化Colly收集器 c := colly.NewCollector( colly.AllowedDomains("www.olx.ro"), // 修正:仅传入纯域名 ) // 设置User-Agent,模拟浏览器请求 c.UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" // HTML解析逻辑:定位卖家名称元素 c.OnHTML(".css-1lcz6o7", func(e *colly.HTMLElement) { sellerName := e.ChildText("h4.css-1wxaaza") if sellerName != "" { // 捕获写入错误 if err := writer.Write([]string{sellerName}); err != nil { log.Printf("写入CSV失败,错误:%q", err) } fmt.Printf("已获取卖家名称:%s\n", sellerName) } else { log.Println("未找到卖家名称元素") } }) // 捕获请求错误 c.OnError(func(_ *colly.Response, err error) { log.Printf("请求页面失败,错误:%q", err) }) fmt.Println("开始爬取页面...") err = c.Visit("https://www.olx.ro/d/oferta/bmw-xdrixe-seria-7-2020-71000-tva-IDgp7iN.html") if err != nil { log.Fatalf("发起访问请求失败,错误:%q", err) } log.Println("\n爬取完成") }
验证步骤
- 运行修改后的代码,检查CSV文件是否成功写入卖家名称
- 如果后续类名再次失效,打开目标页面的开发者工具(F12),重新定位卖家名称元素,更新对应的CSS选择器即可
内容的提问来源于stack exchange,提问作者DvdiidI
相关产品推荐
相关产品推荐

