【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云

【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云

serverless服务是腾讯云自研的新一代云原生关系型数据库TDSQ L-C的无服务器架构版,是全Serverless架构的云原生数据库

前言

体验了一下腾讯云刚出的TDSQL-C Serverless,使用它存储数据比较方便,能根据负载动态扩容,现在我们正好用来爬下数据分析一下。

数据源

processOn是比较常用的画图平台,它的模版也是比较丰富,但是基本上都要钱。。。

现在我们爬一下数据,看下这些推荐的模版标题的构成,即什么样的词汇比较容易被推荐,还有它的价格分布是怎样的

项目目录

config存储配置文件,dao负责链接数据库,logic下面就是具体的逻辑,包括爬虫、分析、词云分词。

爬虫

具体爬虫代码如下,这里才有异步存储,也正好测试下数据库的性能如何

go 复制代码
import (
	"fmt"
	"github.com/anaskhan96/soup"
	"github.com/spf13/cast"
	"strings"
	"sync"
	"td_test/logic/wordcloud"
)

func Crawl(url string) error {
	res, err := soup.Get(url)
	if err != nil {
		return err
	}
	var wg sync.WaitGroup
	doc := soup.HTMLParse(res)
	// 模版列表
	tempList := doc.FindAll("div", "class", "list-item-content")
	for _, item := range tempList {
		// 模版详情数据
		detail := item.Find("div", "class", "temp-item-detail")
		title := detail.Find("h2").Text()
		// view clone like数量
		var countList []int
		for _, count := range detail.FindAll("span", "class", "count") {
			countList = append(countList, cast.ToInt(count.Text()))
		}
		// 获取价格
		owner := item.Find("div", "class", "temp-item-owner")
		priceStr := owner.Find("span", "class", "count").Text()
		var price float32
		if priceStr != "免费" {
			priceStr = strings.Trim(priceStr, "¥")
			price = cast.ToFloat32(priceStr)
		}
		// 异步存储
		go func() {
			wg.Add(1)
			defer wg.Done()
			saveToDB(title, countList, price)
			// 对标题进行分词并存储
			wordcloud.SplitTitleAndSave(title)
		}()
	}
	wg.Wait()
	return nil
}

分词

分词库用的是结巴分词,直接用它的精准模式即可

go 复制代码
import (
	"github.com/yanyiwu/gojieba"
)

var splitClient *gojieba.Jieba

func init() {
	splitClient = gojieba.NewJieba()
}
func SplitTitleAndSave(title string) {
	words := splitClient.Cut(title, true)
	for i := range words {
		m := &TemplateTitleWordModel{Word: words[i]}
		m.Save()
	}
	return
}

分析词云和价格饼状图

词云和饼状图都是用的github.com/go-echarts/go-echarts,使用比较简单,词云需要把数据从数据库中提取出来塞进去就好了,词云代码:

go 复制代码
func getTitleListFromDB() []opts.WordCloudData {
	var wordList []string
	dao.GetDB().Raw("select word from template_title_words").Scan(&wordList)
	wordMap := make(map[string]int)
	for i := range wordList {
		wordMap[wordList[i]]++
	}
	ans := make([]opts.WordCloudData, 0)
	for k, v := range wordMap {
		ans = append(ans, opts.WordCloudData{Value: v, Name: cast.ToString(k)})
	}
	return ans
}
func createWordCloud(title string, data []opts.WordCloudData) {
	wc := charts.NewWordCloud()
	wc.SetGlobalOptions(charts.WithTitleOpts(opts.Title{Title: title}))
	wc.AddSeries(title, data).
		SetSeriesOptions(
			charts.WithWorldCloudChartOpts(
				opts.WordCloudChart{
					SizeRange: []float32{40, 80},
					Shape:     "cardioid",
				}),
		)
	f, _ := os.Create(fmt.Sprintf("wordcloud_%s.html", title))
	_ = wc.Render(f)
}

生成的词云如下

价格分布如下

小结

可以看到,标题中流程图 词汇占比最高,价格中五块钱的模版占比最高,其次是3块钱的,再其次是免费的。

TDSQL-C Serverless使用体验上还不错,比较丝滑,感觉和远程数据库差不多,它动态扩缩容能力也能让我们少操点心

相关推荐
2的n次方_2 小时前
Runtime 执行提交机制:NPU 硬件队列的管理与任务原子化下发
c语言·开发语言
凡人叶枫3 小时前
C++中智能指针详解(Linux实战版)| 彻底解决内存泄漏,新手也能吃透
java·linux·c语言·开发语言·c++·嵌入式开发
凡人叶枫4 小时前
C++中输入、输出和文件操作详解(Linux实战版)| 从基础到项目落地,避坑指南
linux·服务器·c语言·开发语言·c++
傻乐u兔5 小时前
C语言进阶————指针3
c语言·开发语言
CodeSheep程序羊6 小时前
拼多多春节加班工资曝光,没几个敢给这个数的。
java·c语言·开发语言·c++·python·程序人生·职场和发展
I'mChloe7 小时前
PTO-ISA 深度解析:PyPTO 范式生成的底层指令集与 NPU 算子执行的硬件映射
c语言·开发语言
2的n次方_7 小时前
Runtime 内存管理深化:推理批处理下的内存复用与生命周期精细控制
c语言·网络·架构
嵌入小生0077 小时前
标准IO---核心函数接口延续(嵌入式Linux)
c语言·vscode·vim·嵌入式·小白·标准io·函数接口
历程里程碑8 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
智者知已应修善业10 小时前
【洛谷P9975奶牛被病毒传染最少数量推导,导出多样例】2025-2-26
c语言·c++·经验分享·笔记·算法·推荐算法