前一段时间学习了数据可视化谷歌趋势。

谷歌趋势允许把折线图上的数据按照日期和词条顺序以csv表格文件的形式下载下来。

但还是不如爬虫抓取数据来得快。

于是在Github找谷歌趋势的爬虫。

pytrends:https://github.com/GeneralMills/pytrends

首先该搭梯子的还是要搭梯子……

调用TrendReq().build_payload函数即可读取词条的热度趋势数据,在参数里面可以设置时间读取的时间范围。

谷歌趋势的热度数值范围是0~100。

当词条只有单个时,读取到的热度是相对于本词条最高热度的热度数值。

也可以把多个词条同时加入到词条数组里面(遗憾的是谷歌只能同时对比5个词条,超过5个会返回HTTP 403错误),这样读取出来的数据会是各个词条对比之后的相对热度数值。

再调用TrendReq().interest_over_time函数可以把词条的趋势数据输出为dataframe格式。

然后经过遍历输出到csv文件即可。

另外,谷歌趋势聚合了一些同主题的词条(把多个词条聚合到同一个词条当中),可以调用TrendReq().suggestions函数获取某词条对应的主题词条,这样可以减小单词条所带来的误差和漏算。这些主题词条对应的词条名称一般是一串代码。

但也有一点问题,谷歌趋势有些主题所聚合的词条并不正确,例如主题词条“Fate系列”和词条“Fate/Grand Order”的热度趋势并不处于一个量级,很明显是谷歌的聚合算法有错误。

pytrends只能获取到谷歌趋势某段时间内的相对热度数值,并不能获取其绝对热度数值。因此在爬取数据的时候要设定好时间范围。

时间范围越大,所能获取到的热度数值范围反而越小。

如果从2004年开始获取至今的热度数据,时间单位是月而非天。

目前还没有办法获取从2004年至今每一天的热度数值,但能获取到从2004年至今每一天中的每小时的热度数值(热度有效范围仅限于当天)。

猜测谷歌并没有放出获取绝对热度数值的接口。

为了解决一次只能对5个词条对比来读取热度的问题,可以考虑先找到热度最大的那个词条,再用那个词条和其余的词条一一对比读取出对比后的热度。

由于相对热度的最大值为100,可能会对热度非常小的词条造成很大的误差。

分类: 技术小记

0 条评论

发表回复

Avatar placeholder

您的电子邮箱地址不会被公开。 必填项已用*标注


The reCAPTCHA verification period has expired. Please reload the page.