世界疫情的数据很多网站都有,这里我还是使用手机网易的疫情数据接口。

首先,切换ua,换成手机模式。百度搜索“网易 疫情”,

第一个就是。

打开这个网址,点开开发者工具,刷新一下。就可以看到有这么几个,第一个请求,就是数据

但是这里我们要用的是世界疫情。所以,还得往下多看几眼。

这第一个请求里,会给你今天的世界疫情数据。但是我们想绘制的是随着时间变化,增长的数据竞赛柱状图。只有一天是不行的。

但是,这里有一个游泳的数据是,areaTree下面,每一个国家的id都有了。

后面用数据的请求接口,需要用到这个id。这里我就选7个国家,每个单独记下来就行,也没必要用request提取。

当然了,这里我也是用的python。毕竟第一次也不知道这几个国家的id。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import re
import os
import time
import requestsplt.rcParams["font.family"] = "SimHei"wk_dir = "数据分析"
data_dir = "数据分析/data"headers = {'User-Agent': 'Mozilla/5.0 (Linux; Android 11) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.120 Mobile Safari/537.36','Accept': '*/*','Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2','Origin': 'https://wp.m.163.com','Connection': 'keep-alive','Referer': 'https://wp.m.163.com/','Sec-Fetch-Dest': 'empty','Sec-Fetch-Mode': 'cors','Sec-Fetch-Site': 'same-site','TE': 'trailers',
}params = (('t', '326632088930'),
)response = requests.get('https://c.m.163.com/ug/api/wuhan/app/data/list-total', headers=headers, params=params)#NB. Original query string below. It seems impossible to parse and
#reproduce query strings 100% accurately so the one below is given
#in case the reproduced version is not "correct".
# response = requests.get('https://c.m.163.com/ug/api/wuhan/app/data/list-total?t=326632088930', headers=headers)rj = response.json()
rj.keys()
data = rj['data']
data.keys()areaTree = data['areaTree']countryCode = [ x['id']  for x in areaTree]
countryName = [ x['name'] for x in areaTree]dct_country_id = dict(zip(countryName, countryCode))dct_country_id['美国']

这里的代码,params,里面只有一个t, 这个t刚开始我以为是时间,但是也不知道这个是怎么构造的。反正就用这个,后面请求历史数据的时候,这个t也不需要改,没啥影响。

返回json格式的,我就依次提取 json数据里的 data→areaTree→各国的id

做成一个字典,这样通过字典就可以查询“美国”返回7,中国是0.

然后点击“世界疫情”

出现,各个国家的数据。

美国后面有“详情”,点击一下,看看这个请求时什么结构,

第二个请求,他的数据就是美国的数据,

我们看请求头。

数据最后一行是今天的美国人数。

这个请求头,是这个url

https://c.m.163.com/ug/api/wuhan/app/data/list-by-area-code?areaCode=7&t=1633273396571

直接复制这个网址,到浏览器,可以看出,它就能返回给我们美国的数据。

所以规律就是,替换掉 areaCode的数字,我们分别用几个国家的id,替换,轮番请求。就可以得到一个世界各国的疫情历史数据。

need_countries = ['中国', '美国', '英国', '伊朗', '西班牙', '韩国', '德国', '意大利', '印度']need_countriesdct_allData = {}for country in need_countries:country_id = dct_country_id[country]print(country, "*"*20, country_id)url = f"https://c.m.163.com/ug/api/wuhan/app/data/list-by-area-code?areaCode={country_id}&t=1633160447810"print(url)try:response = requests.get(url, headers = headers)time.sleep(3)rj = response.json()dct_allData[country] = rj['data']print("success")except:print("failed")country_idurldct_allDatadct_allData.keys()

这样就得到了9个国家的数据了。

比如,美国的,都在字典 allData里


usa = dct_allData['美国']
usa['list']
list = usa['list']
len(list)

先保存一下数据。

pd.to_pickle(dct_allData, os.path.join(data_dir, "allData疫情数据"))

后面在操作这个数据就可以了。

不需要爬虫了。

这里我们只需要两个数据就可以了。

就是

date和confirm

其他都不需要。

dct_confirm = {}for c in dct_allData.keys():confirm = [ x['total']['confirm'] for x in dct_allData[c]['list'] ]dct_confirm[c] = confirmdct_confirm.keys()len(dct_confirm['美国'])
len(dct_confirm['印度'])

每一个国家的数据,都可以做成一个dataframe

china_list = china['list']
china_date = [ x['date'] for x in china_list]
china_confirm = [ x['total']['confirm'] for x in china_list]df_china = pd.DataFrame({'date':china_date,'confirm':china_confirm
})
df_china

这里要注意的是,不同国家,有的时间没有数据。date不是同样的。数据也不等长。

f_china.shapeusa_list = usa['list']
usa_date = [ x['date'] for x in usa_list]
usa_confirm = [ x['total']['confirm'] for x in usa_list]df_usa = pd.DataFrame({'date':usa_date,'confirm':usa_confirm
})df_usa.shape

可以看出,中国有604个date有数据,美国只有589个。

这样在合并成一个大表的时候,就需要注意日期,有的是缺失值。

def get_data(key):len_key = len(df[key]['list'])print(len_key)data = []date = []for i in range(len_key):d = df[key]['list'][i]['total']['confirm']data.append(d)dt = df[key]['list'][i]['date']date.append(dt)return dict(zip(date, data))dct_data = {}for key in df.keys():dct_data[key] = get_data(key)dct_data.keys()
pd.DataFrame(dct_data)

这里我们定义一个提取date和confirm的两个数据的函数,对每个国家执行这个函数,得到dct_data是一个大的字典。

直接用pandas生成这一个字典。

就可以得到一个大表。

pandas还是很智能,会自动按照各个国家的date排序,把没有数值的弄成NAN,只保留一个date作为index


df_test = pd.DataFrame(dct_data)
df_test.shape
df_test.index

df_test2 = df_test.sort_index(ascending=True)
df_test2
df_test2.keys()df_test2.columns = ['china', 'usa','uk',  'iran', 'spain', 'korea', 'germey', 'italian', 'india']
df_test2

把index按照时间顺序排序,把国家名字改成英文。

爬虫+数据分析,制作一个世界疫情人数增长动态柱状竞赛图相关推荐

  1. 爬虫+数据分析,制作一个世界疫情人数增长动态柱状竞赛图2

    有了上面的数据,直接读进来. allData = pd.read_pickle(os.path.join(data_dir, "allData疫情数据")) 然后,提取日期,con ...

  2. python自动生成鸡汤文_python爬虫+pyinstaller制作一个属于自己的心灵鸡汤

    效果图如下: 实现方法 用Python爬虫对现有的api进行请求,获取彩虹屁,然后用tkinter模块形成一个可视化的gui,最后用pyinstaller对该py文件打包,这就是最后的彩虹屁生成器. ...

  3. RE:利用爬虫技术制作一个看动漫新番的APP

    作者:hwj3747 转载请注明 简介 在看动漫追番的时候,发现每一季度的新番都是被优酷,爱奇艺,哔哩哔哩,PPTV等各大视频厂商买了版权,导致我在手机上要装各种软件,并且很多番更是直接被广电禁掉了, ...

  4. 带你制作一个拥有图形用户界面的彩色动态二维码生成器

    文章目录 开头说两局 制作步骤 完整代码 你好,我是goldsun. 你有想法和我一起进步吗? 开头说两局 不知不觉,自己来到CSDN竟然已经写了20来篇文章了,甚至其中还有超过上万字的,从小语文就异 ...

  5. 如何在ppt中生成柱状图_PPT中怎么制作动态柱状图表?绘制方法全在这里!

    在我们平日的工作当中,我们经常会在每个季度,或者是每年做一些工作总结的汇报.而在进行工作内容汇报时,我们经常会用到PPT,将我们的工作内容或成果用PPT的形式展现出来,以方便领导进行查看以及自己的讲解 ...

  6. python做疫情数据分析的框架_Python制作新冠疫情世界地图

    目录 pyecharts模块 简介 Echarts 是一个由百度开源的数据可视化,凭借着良好的交互性,精巧的图表设计,得到了众多开发者的认可.而 Python 是一门富有表达力的语言,很适合用于数据处 ...

  7. Python爬虫,数据可视化之matplotlib初步--制作一个高楼高度的条形统计图全思路

    实现步骤: 1. 通过爬虫,爬取高楼的信息 2. 筛选我们的需要的信息 3. 制作一个表格 4. 解析表格,制作统计图 1 -- 爬虫 首先观察目标网页 发现所有有用的信息都在<p>标签中 ...

  8. 我的世界html导入整合包教程,《我的世界手机版》如何制作一个整合包教程攻略...

    今天当乐网小编要给大家分享的是一个我的世界手机版整合包的制作教程: 我的世界手机版中,很多玩家可能还不会使用单独的材质包以及存档等等,这个时候就会有比较有爱的玩家制作出整合包分享出来,整合包直接安装 ...

  9. 基于微信小程序+爬虫制作一个表情包小程序

    跟朋友聊天斗图失败气急败坏的我选择直接制作一个爬虫表情包小程序,从源头解决问题,从此再也不用担心在斗图中落入下风 精彩专栏持续更新↓↓↓ 微信小程序实战开发专栏 一.API 1.1 项目创建 1.2 ...

最新文章

  1. Cocos Creator快速开通联网服务教程
  2. 如何在php中插入map热点,PHP中使用BigMap实例
  3. java与jquery的选择器区别_java day44【JQuery 基础:概念,快速入门,JQuery对象和JS对象区别与转换,选择器,DOM操作,案例】...
  4. 计算机c语言二级试题及答案,计算机c语言二级考试试题及其答案.doc
  5. Excel 【小型成绩分析系统初稿】(功能及适应性有待完善)
  6. 2019自考00018计算机应用基础,全国2019年4月自考00018《计算机应用基础》试题及答案...
  7. java程序员 css_好程序员Web前端分享前端CSS篇
  8. 《深度学习笔记》——线性代数基础
  9. linux/windows查询文件特定内容并写入目标文件
  10. STM32 固件包下载
  11. 最短路径spfa算法
  12. windows 即时贴_如何在Windows 10上使用即时贴
  13. 众银行纷纷抢滩网贷市场 大数据征信如何做?
  14. wegt安装tomcat镜像use --no-check-certificate
  15. 地址解析协议(ARP)
  16. BZOJ4134: ljw和lzr的hack比赛
  17. 5个视频素材网站推荐
  18. 最详细的虚拟机安装教程
  19. 春运火车票开抢,最强攻略请注意查收
  20. Damerau–Levenshtein Distance的java实现

热门文章

  1. jmeter 取json值_干货丨实战经验分析,带你走进Jmeter参数化
  2. 3.6 交并比-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  3. 2.2 清除标注错误的数据-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  4. ERROR: This virtual machine appears to be in use
  5. 【s操作】轻松优雅的保存微信群图片和朋友圈图片
  6. 文化氛围对新人培养新人的影响
  7. MySQL查询获取行号rownum
  8. RocketMQ高性能之底层存储设计
  9. linux查看进程相关命令
  10. android通过BitmapFactory.decodeFile获取图片bitmap报内存溢出的解决办法