当前位置: 首页 > news >正文

手把手教你用Go打造带可视化的网络爬虫

用Go语言搞爬虫,不光能抓数据,还能把数据变成酷炫的图表,一站式搞定!它虽然不像Python有那么多现成的库,但强大的并发性能和丰富的第三方包,让它既能高效爬取,也能轻松实现可视化,效果一点不差。

在这里插入图片描述

Go语言不仅可以实现高效的网络爬虫,还能通过多种方式实现数据可视化。虽然Go在数据可视化方面的生态不如Python丰富,但仍然有不错的库可以使用。

示例代码

package mainimport ("fmt""log""os""strconv""strings""github.com/gocolly/colly""github.com/go-echarts/go-echarts/v2/charts""github.com/go-echarts/go-echarts/v2/opts"
)// 定义数据结构
type Product struct {Name  stringPrice float64Stars float64
}func main() {// 初始化爬虫c := colly.NewCollector(colly.AllowedDomains("books.toscrape.com"),)var products []Product// 查找产品信息c.OnHTML(".product_pod", func(e *colly.HTMLElement) {// 提取书名title := e.ChildAttr(".image_container img", "alt")// 提取价格priceStr := e.ChildText(".price_color")priceStr = strings.Replace(priceStr, "£", "", 1)price, err := strconv.ParseFloat(priceStr, 64)if err != nil {log.Printf("价格转换错误: %v", err)return}// 提取评分starClass := e.ChildAttr(".star-rating", "class")stars := parseStars(starClass)products = append(products, Product{Name:  title,Price: price,Stars: stars,})})// 处理下一页c.OnHTML(".next a", func(e *colly.HTMLElement) {nextPage := e.Request.AbsoluteURL(e.Attr("href"))c.Visit(nextPage)})// 设置爬虫错误处理c.OnError(func(r *colly.Response, err error) {log.Println("请求错误:", err)})// 开始爬取fmt.Println("开始爬取数据...")err := c.Visit("http://books.toscrape.com/")if err != nil {log.Fatal(err)}fmt.Printf("共爬取到 %d 条数据\n", len(products))// 生成可视化图表generateChart(products)
}// 解析星级评分
func parseStars(starClass string) float64 {parts := strings.Split(starClass, " ")if len(parts) < 2 {return 0}switch parts[1] {case "One":return 1case "Two":return 2case "Three":return 3case "Four":return 4case "Five":return 5default:return 0}
}// 生成可视化图表
func generateChart(products []Product) {// 准备数据var names []stringvar prices []opts.BarDatavar stars []opts.ScatterDatafor _, p := range products {names = append(names, p.Name)prices = append(prices, opts.BarData{Value: p.Price})stars = append(stars, opts.ScatterData{Value: p.Stars})}// 创建柱状图显示价格bar := charts.NewBar()bar.SetGlobalOptions(charts.WithTitleOpts(opts.Title{Title: "图书价格分布",}),charts.WithXAxisOpts(opts.XAxis{Name: "图书名称",AxisLabel: &opts.AxisLabel{Show: true, Interval: "0", Rotate: 45},}),charts.WithYAxisOpts(opts.YAxis{Name: "价格(£)",}),charts.WithInitializationOpts(opts.Initialization{Width:  "1200px",Height: "600px",}),)bar.SetXAxis(names).AddSeries("价格", prices)// 创建散点图显示评分scatter := charts.NewScatter()scatter.SetGlobalOptions(charts.WithTitleOpts(opts.Title{Title: "图书评分分布",}),charts.WithXAxisOpts(opts.XAxis{Name: "图书名称",AxisLabel: &opts.AxisLabel{Show: true, Interval: "0", Rotate: 45},}),charts.WithYAxisOpts(opts.YAxis{Name: "评分",}),charts.WithInitializationOpts(opts.Initialization{Width:  "1200px",Height: "600px",}),)scatter.SetXAxis(names).AddSeries("评分", stars)// 创建HTML文件f, err := os.Create("book_analysis.html")if err != nil {log.Fatal(err)}defer f.Close()// 渲染图表到HTMLpage := charts.NewPage()page.AddCharts(bar, scatter)page.Render(f)fmt.Println("可视化图表已生成到 book_analysis.html")
}

运行说明

1、首先安装依赖:

go mod init crawler-viz
go get github.com/gocolly/colly
go get github.com/go-echarts/go-echarts/v2

2、运行程序:

go run main.go

3、打开生成的 book_analysis.html 文件查看可视化结果

其他可视化选项

除了使用go-echarts,你还可以考虑:

1、Gonum Plot - 生成静态图像( PNG/SVG等)

2、Grafana - 与Go程序集成展示时序数据

3、Web框架集成 - 使用Gin/Echo等框架提供可视化Web服务

4、导出数据 - 将数据导出为CSV/JSON,然后用其他工具分析

这个示例展示了如何使用Go实现爬虫和数据可视化的基本流程,你可以根据实际需求调整爬取目标和可视化方式。

所以,用Go来做爬虫和数据可视化是完全可行的。它特别适合需要处理大量数据的高并发场景。从采集到展示,一套流程全搞定,高效又省心,绝对是值得你尝试的强大工具。


文章转载自:

http://7Tw8RTN9.sgpnz.cn
http://Uq45N4zC.sgpnz.cn
http://SZdj4PkO.sgpnz.cn
http://1BmahizD.sgpnz.cn
http://CHHQIMME.sgpnz.cn
http://ViiEmLZt.sgpnz.cn
http://uH2lCnPp.sgpnz.cn
http://ZPrzOzB1.sgpnz.cn
http://ytyCCtPr.sgpnz.cn
http://ghvd0B74.sgpnz.cn
http://NxD3b1gp.sgpnz.cn
http://RXMjQ1rx.sgpnz.cn
http://Ua0CdN1p.sgpnz.cn
http://8sXjU8hW.sgpnz.cn
http://OtAKH8qD.sgpnz.cn
http://kzDHNLcW.sgpnz.cn
http://QElulJA9.sgpnz.cn
http://676EarMD.sgpnz.cn
http://vC4SQihb.sgpnz.cn
http://ftSJXrGi.sgpnz.cn
http://X1CXcq7X.sgpnz.cn
http://rvHRJwyE.sgpnz.cn
http://FgfRmjDy.sgpnz.cn
http://n1PHQrZk.sgpnz.cn
http://6xQFxnAI.sgpnz.cn
http://Z0DNUcKY.sgpnz.cn
http://l45od0vA.sgpnz.cn
http://WRrZLFfd.sgpnz.cn
http://t7oJB7ri.sgpnz.cn
http://WJR0PJVf.sgpnz.cn
http://www.dtcms.com/a/367892.html

相关文章:

  • 极致效率:用 Copilot 加速你的 Android 开发
  • ISP对噪声的影响
  • 深度学习从入门到精通 - AutoML与神经网络搜索(NAS):自动化模型设计未来
  • Day36 TCP客户端编程 HTTP协议解析 获取实时天气信息
  • 分享个C++线程池的实现源码
  • 143. 重排链表
  • 实习结束,秋招开启
  • MySQL集群高可用架构---mysql高可用之组复制 (MGR)
  • nginx采用反向代理的时候使用变量的坑
  • Kali搭建sqli-labs靶场
  • 【硬件笔记】负载是如何烧MOS的?
  • 从 Prompt 到 Context:LLM OS 时代的核心工程范式演进
  • 设计模式从入门到精通之(六)策略模式
  • 【译】GitHub Copilot for Azure(预览版)已经在 Visual Studio 2022 中推出
  • langchain 提示模版 PromptTemplate
  • Ubuntu开发笔记:1.常见操作指令
  • DDD+WebAPI实战
  • 狗都能看懂的HunYuan3D 1.0详解
  • CodeQL(Mac)安装与测试(Visual Studio)简明指南
  • Next.js 介绍:为什么选择它来构建你的下一个 Web 应用?
  • $attrs学习
  • 无定位更安全:5G 高清视频终端的保密场景适配之道
  • GitHub 热榜项目 - 日榜(2025-09-05)
  • 一文看懂什么是GaN HEMT以及其工艺流程(氮化镓高电子迁移率晶体管)
  • 【AI编程工具】快速搭建图书管理系统
  • 安卓学习 之 EditText 控件
  • 2025职教技能大赛汽车制造与维修赛道速递-产教融合实战亮剑​
  • java面试中经常会问到的zookeeper问题有哪些(基础版)
  • 光伏项目无人机踏勘--如何使用无人机自动航线规划APP
  • jenkins加docker 部署项目