相信很多人都看到了用python写动态条形图的文章了吧?

既然有了Python这个制作动态条形图工具,缺的那便是数据了。

先看一下B站2019年「数据可视化」版块的情况,第一个视频超2百万的播放量,4万+的弹幕。

用什么来衡量手游的热门程度呢,答案便是百度指数

同样我使用的也是百度指数,百度指数是以百度海量网民行为数据为基础的数据分享平台。

所以本期就来聊一聊可视化视频的数据获取,主要是「百度指数」和「微博指数」。

本来想加上「微信指数」的,发现电脑的抓包软件出了问题,所以就没有加上。

01. 百度指数

获取百度指数,首先需要登陆你的百度账号。

以关键词「王者荣耀」为例,时间自定义为2020-10-01~2020-10-10。

通过开发者工具,我们就能看到曲线图的数据接口。

然而一看请求得到的结果,发现并没有数据,原因是这里使用了JS加密

这可碰到小F的知识盲区了,果断选择去找度娘,各位有兴趣的同学也可自行百度。

最终找到解决方法,成功实现爬取,代码如下~

import time
import json
import execjs
import datetime
import requests
from urllib.parse import urlencodedef get_data(keywords, startDate, endDate, area):"""获取加密的参数数据"""# data_url = "http://index.baidu.com/api/SearchApi/index?area=0&word=[[%7B%22name%22:%22%E7%8E%8B%E8%80%85%E8%8D%A3%E8%80%80%22,%22wordType%22:1%7D]]&startDate=2020-10-01&endDate=2020-10-10"params = {'word': json.dumps([[{'name': keyword, 'wordType': 1}] for keyword in keywords]),'startDate': startDate,'endDate': endDate,'area': area}data_url = 'http://index.baidu.com/api/SearchApi/index?' + urlencode(params)# print(data_url)headers = {# 复制登录后的cookie"Cookie": '你的cookie',"Referer": "http://index.baidu.com/v2/main/index.html","User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.90 Safari/537.36"}# 获取data和uniqidres = requests.get(url=data_url, headers=headers).json()data = res["data"]["userIndexes"][0]["all"]["data"]uniqid = res["data"]["uniqid"]# 获取js函数中的参数t = "ev-fxk9T8V1lwAL6,51348+.9270-%"t_url = "http://index.baidu.com/Interface/ptbk?uniqid={}".format(uniqid)rep = requests.get(url=t_url, headers=headers).json()t = rep["data"]return {"data": data, "t": t}def get_search_index(word, startDate, endDate, area):"""获取最终数据"""word = wordstartDate = startDateendDate = endDate# 调用get_data获取data和uniqidres = get_data(word, startDate, endDate, area)e = res["data"]t = res["t"]# 读取js文件with open('parsing_data_function.js', encoding='utf-8') as f:js = f.read()# 通过compile命令转成一个js对象docjs = execjs.compile(js)# 调用function方法,得到指数数值res = docjs.call('decrypt', t, e)# print(res)return resdef get_date_list(begin_date, end_date):"""获取时间列表"""dates = []dt = datetime.datetime.strptime(begin_date, "%Y-%m-%d")date = begin_date[:]while date <= end_date:dates.append(date)dt += datetime.timedelta(days=1)date = dt.strftime("%Y-%m-%d")return datesdef get_area():areas = {"901": "山东", "902": "贵州", "903": "江西", "904": "重庆", "905": "内蒙古", "906": "湖北", "907": "辽宁", "908": "湖南", "909": "福建", "910": "上海", "911": "北京", "912": "广西", "913": "广东", "914": "四川", "915": "云南", "916": "江苏", "917": "浙江", "918": "青海", "919": "宁夏", "920": "河北", "921": "黑龙江", "922": "吉林", "923": "天津", "924": "陕西", "925": "甘肃", "926": "新疆", "927": "河南", "928": "安徽", "929": "山西", "930": "海南", "931": "台湾", "932": "西藏", "933": "香港", "934": "澳门"}for value in areas.keys():try:word = ['王者荣耀']time.sleep(1)startDate = '2020-10-01'endDate = '2020-10-10'area = valueres = get_search_index(word, startDate, endDate, area)result = res.split(',')dates = get_date_list(startDate, endDate)for num, date in zip(result, dates):print(areas[value], num, date)with open('area.csv', 'a+', encoding='utf-8') as f:f.write(areas[value] + ',' + str(num) + ',' + date + '\n')except:passdef get_word():words = ['诸葛大力', '张伟', '胡一菲', '吕子乔', '陈美嘉', '赵海棠', '咖喱酱', '曾小贤', '秦羽墨']for word in words:try:time.sleep(2)startDate = '2020-10-01'endDate = '2020-10-10'area = 0res = get_search_index(word, startDate, endDate, area)result = res.split(',')dates = get_date_list(startDate, endDate)for num, date in zip(result, dates):print(word, num, date)with open('word.csv', 'a+', encoding='utf-8') as f:f.write(word + ',' + str(num) + ',' + date + '\n')except:passget_area()

得到的CSV文件结果如下,有两种形式的数据。

一种是多个关键词每日指数数据,另一种是一个关键词各省市每日指数数据。

有了数据就可以用Python制作动图啦。

import pandas as pd
import bar_chart_race as bcr# 读取数据
# df = pd.read_csv('word.csv', encoding='utf-8', header=None, names=['name', 'number', 'day'])
df = pd.read_csv('area.csv', encoding='utf-8', header=None, names=['name', 'number', 'day'])# 数据处理,数据透视表
df_result = pd.pivot_table(df, values='number', index=['day'], columns=['name'], fill_value=0)# 生成GIF
# bcr.bar_chart_race(df_result, filename='word.gif', title='爱情公寓5演职人员热度排行')
bcr.bar_chart_race(df_result, filename='area.gif', title='国内各省市王者荣耀热度排行')

5行Python代码,来看一下效果如何。

是成功实现了,就是配色有那么点渣,这个可自行修改颜色配置文件,让你的动图变得好看。

另外我建立了一个Python学习圈子:1156465813。在彼此的沟通可以我们可以得到很多学习经验,积累知识,群内有2020最新的python学习资料,大家可以一起讨论问题,共同进步。

用Python获取动态图表数据!相关推荐

  1. 利用python获取word图表数据和修改图表信息

    利用python获取word图表数据和修改图表信息 起因咸鱼有个人问word怎么修改图表信息,想用docx库找不到关于图表的方法,这里用了Win32com. import time import wi ...

  2. Python实战案例,requests模块,Python实现获取动态图表

    前言 利用Python实现获取动态图表,废话不多说~ 让我们愉快地开始吧~ 开发工具 Python版本: 3.6.4 相关模块: re模块: requests模块: urllib模块: pandas模 ...

  3. 为了提前预测比赛结果,于是我用Python获取比赛球员数据进行分析,结果...

    为了提前预测比赛结果,于是我用Python获取比赛球员数据进行分析,结果... 前因后果 准备工作 实现步骤 代码展示 部分效果展示 最后 前因后果 最近不是世界杯嘛,但是太忙了实在没时间看,于是为了 ...

  4. python 行情数据,拼多多股票:Python获取股票行情数据的一种方法

    Python获取股票行情数据的一种方法 拼多多股票 本号帮大家找了一个可免费获取股票行情数据的接口. Tushare社区目前主要维护新版本:tushare pro,数据更稳定拼多多股票质量更高,可获取 ...

  5. Python获取电子书籍数据

    Python获取电子书籍数据-以当当网为例 (一)以css方式获取 import requests,csv from bs4 import BeautifulSoup import codecs #自 ...

  6. python绘制动态图表怎么存下来_做动态图表,没有数据?用Python就能获取!

    这是小F在国庆之前写的一篇文章,全网阅读累计达到3万+. 既然有了Python这个制作动态条形图工具,缺的那便是数据了. 先看一下B站2019年「数据可视化」版块的情况,第一个视频超2百万的播放量,4 ...

  7. python绘制动态图表怎么存下来_用python如何实现导入excel数据后自动生成图表?python如何实现交互式动态图表?...

    这个需求涉及的环节太多了.导入excel文件,获取数据 -- 需要xlrd模块把数据导入python 2. 设定输出图表类型 -- 需要matplot模块.根据数据复杂度,可能需要ETL,那么需要pa ...

  8. Python 制作动态图表,看全球疫情变化趋势

    作者 | 刘早起早起 责编 | 屠敏 前言 最近国内疫情已经有所好转,但是国外的情况不容乐观,那么怎样用Python去制作动态图表来看全球疫情变化趋势呢?比如下面的国内外疫情发展趋势: 还是全球疫情发 ...

  9. python制作动态心电图_用python制作动态图表看全球疫情变化趋势

    点击上方"早起python",关注公众号 满满干货,极速送达 一.前言 最近国内疫情已经有所好转,但是国外的情况不容乐观,那么怎样用python去制作动态图表来看全球疫情变化趋势呢 ...

最新文章

  1. typedef的四个用途和两大陷阱
  2. Mysql高级调优篇——前言简介
  3. 用python随机生成数字_如何实现python随机生成数字?
  4. 改变单选或者复选框的样式
  5. python 调用摄像头拍照_《自拍教程67》Python调用摄像头, 拍照拍照!
  6. SPI初始化C语言编程,SD卡spi模式读写,初始化和复位都成功了
  7. matlab常用函数——矩阵函数
  8. React开发(129):ant design学习指南之form中的layout
  9. 【Kafka】Kafka The valid options based on currently configured listeners are PLAINTEXT,SSL
  10. 合理利用Java不可变对象,让你的代码更加优雅
  11. mrtg监控硬盘容量,内存占用,CPU占用 二
  12. vfp邮件.html格式,VFP 实现自动发邮件代码
  13. 台达EH3系列PLC与温控器的MODBUS RTU通信例程
  14. 文明与征服萨拉丁怎么搭配阵容?
  15. S7-1200通过FB284控制V90时,反馈的实际速度换算方法
  16. 目前最值得入手的蓝牙耳机有哪些?四款高性价比蓝牙耳机推荐
  17. 计算机软件著作权的注册和认证
  18. 功能测试的测试点全集
  19. 华钜同创:亚马逊运营新品广告运营的策略
  20. 微信小程序 修改button为圆形按钮并设置图片

热门文章

  1. 在html页面中的js如何调试,你可能不知道的14个JavaScript调试技巧
  2. SpringIOC和AOP介绍
  3. Git批量删除本地分支
  4. 【TensorFlow实战】TensorFlow实现经典卷积神经网络之AlexNet
  5. 【蓝桥杯】第六届蓝桥杯大赛个人赛省赛(软件类) Java大学C组 -题目与答案
  6. Kaptcha图片验证码工具
  7. php图片点击查看大图,基于JavaScript实现移动端点击图片查看大图点击大图隐藏_javascript技巧...
  8. python 商品名称相似度查找(difflib库和结巴分词的运用)
  9. OSError: [Errno 22] Invalid argument:错误
  10. 手机为什么显示服务器异常即将退出游戏,LOL服务器连接异常即将退出怎么回事...