我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Python如何实现获取动态图表

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Python如何实现获取动态图表

本篇内容介绍了“Python如何实现获取动态图表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

开发工具

Python版本: 3.6.4

相关模块:

re模块;

requests模块;

urllib模块;

pandas模块;

以及一些Python自带的模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

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

Python如何实现获取动态图表

百度指数

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

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

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

Python如何实现获取动态图表

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

找到解决方法,成功实现爬取,代码实现

import timeimport jsonimport execjsimport datetimeimport requestsfrom urllib.parse import urlencode  def 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和uniqid    res = 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 = word    startDate = startDate    endDate = endDate    # 调用get_data获取data和uniqid    res = 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 res  def 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 dates  def 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 = value            res = 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:            pass  def get_word():    words = ['诸葛大力', '张伟', '胡一菲', '吕子乔', '陈美嘉', '赵海棠', '咖喱酱', '曾小贤', '秦羽墨']    for word in words:        try:            time.sleep(2)            startDate = '2020-10-01'            endDate = '2020-10-10'            area = 0            res = 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:            pass  get_area()get_word()

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

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

Python如何实现获取动态图表

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

import pandas as pdimport 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='国内各省市王者荣耀热度排行')

微博指数

百度搜索新浪的微博指数,打开网站一看,发现网页版无法使用

Python如何实现获取动态图表

我们只需打开开发者工具,将你的浏览器模拟为手机端,刷新网页即可

Python如何实现获取动态图表

可以看到,微指数的界面出来了

添加关键词,查看指数的数据接口

Python如何实现获取动态图表

请求是Post方法,并且不需要登陆微博账号

import reimport timeimport jsonimport requestsimport datetime  # 请求头信息headers = """accept: application/jsonaccept-encoding: gzip, deflate, braccept-language: zh-CN,zh;q=0.9content-length: 50content-type: application/x-www-form-urlencodedcookie: '你的cookie'origin: https://data.weibo.comreferer: https://data.weibo.com/index/newindex?visit_type=trend&wid=1011224685661sec-fetch-mode: corssec-fetch-site: same-originuser-agent: Mozilla/5.0 (iPhone; CPU iPhone OS 11_0 like Mac OS X) AppleWebKit/604.1.38 (KHTML, like Gecko) Version/11.0 Mobile/15A372 Safari/604.1x-requested-with: XMLHttpRequest""" # 将请求头字符串转化为字典headers = dict([line.split(": ",1) for line in headers.split("\n")])print(headers) # 数据接口url = 'https://data.weibo.com/index/ajax/newindex/getchartdata'  # 获取时间列表def 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 dates  # 相关信息names = ['汤唯', '朱亚文', '邓家佳', '乔振宇', '王学圻', '张艺兴', '俞灏明', '吴越', '梁冠华', '李昕亮', '苏可', '孙骁骁', '赵韩樱子', '孙耀琦', '魏巍']  # 获取微指数数据for name in names:    try:        # 获取关键词ID        url_id = 'https://data.weibo.com/index/ajax/newindex/searchword'        data_id = {            'word': name        }        html_id = requests.post(url=url_id, data=data_id, headers=headers)        pattern = re.compile(r'li wid=\\\"(.*?)\\\" word')        id = pattern.findall(html_id.text)[0]         # 接口参数        data = {            'wid': id,            'dateGroup': '1month'        }        time.sleep(2)        # 请求数据        html = requests.post(url=url, data=data, headers=headers)        result = json.loads(html.text)        # 处理数据        if result['data']:            values = result['data'][0]['trend']['s']            startDate = '2019-01-01'            endDate = '2020-01-01'            dates = result['data'][0]['trend']['x']            # 保存数据            for value, date in zip(values, dates):                print(name, value, date)                with open('weibo.csv', 'a+', encoding='utf-8') as f:                    f.write(name + ',' + str(value) + ',' + date + '\n')    except:        pass

获取到的信息

Python如何实现获取动态图表

也来生成一个动态图表

import pandas as pdimport bar_chart_race as bcr # 读取数据df = pd.read_csv('weibo.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)# print(df_result[:10]) # 生成GIFbcr.bar_chart_race(df_result[:10], filename='weibo.gif', title='大明风华演职人员热度排行')

“Python如何实现获取动态图表”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Python如何实现获取动态图表

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Python如何实现获取动态图表

本篇内容介绍了“Python如何实现获取动态图表”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!开发工具Python版本: 3.6.4相关模块
2023-06-22

Python如何实现炫酷的动态图

这篇文章主要为大家展示了“Python如何实现炫酷的动态图”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Python如何实现炫酷的动态图”这篇文章吧。启动如果你还没安装 Plotly,只需在你的
2023-06-28

Python数据获取如何实现图片数据提取

本篇内容主要讲解“Python数据获取如何实现图片数据提取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python数据获取如何实现图片数据提取”吧!有很多功能…比如用户画像,客户
2023-06-30

selenium如何获取动态数据

这篇文章主要介绍了selenium如何获取动态数据的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇selenium如何获取动态数据文章都会有所收获,下面我们一起来看看吧。Selenium 是一个自动化测试工具,利
2023-07-02

jQuery如何获取动画状态?

jQuery获取动画状态的方法jQuery提供以下方法来获取动画状态:$.fn.is(":animated"):检查元素是否正在动画。$.Animation(element):返回正在运行的动画对象。Animation.paused:指示动画是否暂停。Animation.progress():获取动画进度。Animation.promise():返回动画完成时的Promise。这些方法可用于暂停、恢复或停止动画,等待动画完成或获取动画进度。
jQuery如何获取动画状态?
2024-04-08

PHP如何获取动态数据

这篇文章主要介绍“PHP如何获取动态数据”,在日常操作中,相信很多人在PHP如何获取动态数据问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP如何获取动态数据”的疑惑有所帮助!接下来,请跟着小编一起来学习吧
2023-07-06

Python怎么实现微博动态图片爬取

本篇内容主要讲解“Python怎么实现微博动态图片爬取”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python怎么实现微博动态图片爬取”吧!我们找到微博在浏览器上面用于手机端的调试的APL,如
2023-06-29

Java如何实现动态获取文件的绝对路径

本文小编为大家详细介绍“Java如何实现动态获取文件的绝对路径”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现动态获取文件的绝对路径”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。前言我们知道在 J
2023-07-05

如何获取 MySQL 视图列表?

要获取 MySQL 视图列表,我们可以使用带有 LIKE 运算符的 SELECT 命令。让我们先看看语法。mysql> SELECT TABLE_SCHEMA, TABLE_NAME-> FROM information_schema.ta
2023-10-22

如何使用spring动态获取接口的不同实现类

这篇“如何使用spring动态获取接口的不同实现类”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“如何使用spring动态获取
2023-06-29

python如何获取子列表

小编给大家分享一下python如何获取子列表,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!获取子列表x = [1,2,3,4,5,6]#前3个print x[:3
2023-06-17

shell脚本如何实现获取图片

这篇文章主要介绍了shell脚本如何实现获取图片,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。shell脚本实现获取图片。#!/usr/bin/bash. /etc/init
2023-06-04

如何实现报表数据的动态层次钻取(二)

《如何实现报表数据的动态层次钻取(一)》介绍了利用复杂 sql 实现动态层次结构的方法,但该方法依赖 Oracle 的递归语法,在其他类型的数据库中难以实现。要想通用地实现此类报表,可以使用下面介绍的“集算脚本 + 本地文件”的方法。《各级
2023-06-02

如何实现报表数据的动态层次钻取(一)

在报表项目中有时会遇到进行动态层次钻取的需求,这种报表的开发难度一般都较大。而润乾报表的实现则相对简便很多。下面就以《各级部门 KPI 报表》为例,讲解润乾报表(需要结合集算器实现)实现此类报表的过程。《各级部门 KPI 报表》初始状态如下
2023-06-02

如何用Python绘制动态可视化图表

本篇内容主要讲解“如何用Python绘制动态可视化图表”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何用Python绘制动态可视化图表”吧!安装模块如果你还没安装 Plotly,只需在你的终端
2023-06-30

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录