网站由哪些部分组成部分,成都市公共资源交易服务中心,福州网络推广,农家乐网站源代码【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云 serverless服务是腾讯云自研的新一代云原生关系型数据库TDSQ L-C的无服务器架构版#xff0c;是全Serverless架构的云原生数据库 前言
体验了一下腾讯云刚出的TDSQL-C Serverless#xff0c;使用…【腾讯云 TDSQL-C Serverless产品体验】抓取processon热门模版的标题生成词云 serverless服务是腾讯云自研的新一代云原生关系型数据库TDSQ L-C的无服务器架构版是全Serverless架构的云原生数据库 前言
体验了一下腾讯云刚出的TDSQL-C Serverless使用它存储数据比较方便能根据负载动态扩容现在我们正好用来爬下数据分析一下。
数据源
processOn是比较常用的画图平台它的模版也是比较丰富但是基本上都要钱。。。 现在我们爬一下数据看下这些推荐的模版标题的构成即什么样的词汇比较容易被推荐还有它的价格分布是怎样的
项目目录
config存储配置文件dao负责链接数据库logic下面就是具体的逻辑包括爬虫、分析、词云分词。
爬虫
具体爬虫代码如下这里才有异步存储也正好测试下数据库的性能如何
import (fmtgithub.com/anaskhan96/soupgithub.com/spf13/caststringssynctd_test/logic/wordcloud
)func Crawl(url string) error {res, err : soup.Get(url)if err ! nil {return err}var wg sync.WaitGroupdoc : 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 []intfor _, 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 float32if 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
}分词
分词库用的是结巴分词直接用它的精准模式即可
import (github.com/yanyiwu/gojieba
)var splitClient *gojieba.Jiebafunc 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使用比较简单词云需要把数据从数据库中提取出来塞进去就好了词云代码
func getTitleListFromDB() []opts.WordCloudData {var wordList []stringdao.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使用体验上还不错比较丝滑感觉和远程数据库差不多它动态扩缩容能力也能让我们少操点心