Python实现实时数据采集新型冠状病毒数据实例


Posted in Python onFebruary 04, 2020

Python实时数据采集-新型冠状病毒

源代码 来源:https://github.com/Programming-With-Love/2019-nCoV

疫情数据时间为:2020.2.1

Python实现实时数据采集新型冠状病毒数据实例

项目相关截图:

全国数据展示

Python实现实时数据采集新型冠状病毒数据实例

国内数据展示

Python实现实时数据采集新型冠状病毒数据实例

国外数据展示

Python实现实时数据采集新型冠状病毒数据实例

查看指定区域详细数据

Python实现实时数据采集新型冠状病毒数据实例

源代码,注意安装所需模块(例如 pip install 模块名)

import requests

import re

from bs4 import BeautifulSoup

from time import sleep

import json

from prettytable import ALL

from prettytable import PrettyTable

 

hubei = {}

guangdong = {}

zhejiang = {}

beijing = {}

shanghai = {}

hunan = {}

anhui = {}

chongqing = {}

sichuan = {}

shandong = {}

guangxi = {}

fujian = {}

jiangsu = {}

henan = {}

hainan = {}

tianjin = {}

jiangxi = {}

shanxi1 = {} # 陕西

guizhou = {}

liaoning = {}

xianggang = {}

heilongjiang = {}

aomen = {}

xinjiang = {}

gansu = {}

yunnan = {}

taiwan = {}

shanxi2 = {} # 山西

jilin = {}

hebei = {}

ningxia = {}

neimenggu = {}

qinghai = {} # none

xizang = {} # none

provinces_idx = [hubei, guangdong, zhejiang, chongqing, hunan, anhui, beijing,

         shanghai, henan, guangxi, shandong, jiangxi, jiangsu, sichuan,

         liaoning, fujian, heilongjiang, hainan, tianjin, hebei, shanxi2,

         yunnan, xianggang, shanxi1, guizhou, jilin, gansu, taiwan,

         xinjiang, ningxia, aomen, neimenggu, qinghai, xizang]

map = {

  '湖北':0, '广东':1, '浙江':2, '北京':3, '上海':4, '湖南':5, '安徽':6, '重庆':7,

  '四川':8, '山东':9, '广西':10, '福建':11, '江苏':12, '河南':13, '海南':14,

  '天津':15, '江西':16, '陕西':17, '贵州':18, '辽宁':19, '香港':20, '黑龙江':21,

  '澳门':22, '新疆':23, '甘肃':24, '云南':25, '台湾':26, '山西':27, '吉林':28,

  '河北':29, '宁夏':30, '内蒙古':31, '青海':32, '西藏':33

}

 

 

def getTime(text):

  TitleTime = str(text)

  TitleTime = re.findall('<span>(.*?)</span>', TitleTime)

  return TitleTime[0]

 

def getAllCountry(text):

  AllCountry = str(text)

  AllCountry = AllCountry.replace("[<p class=\"confirmedNumber___3WrF5\"><span class=\"content___2hIPS\">", "")

  AllCountry = AllCountry.replace("<span style=\"color: #4169e2\">", "")

  AllCountry = re.sub("</span>", "", AllCountry)

  AllCountry = AllCountry.replace("</p>]", "")

   

  AllCountry = AllCountry.replace("<span style=\"color: rgb(65, 105, 226);\">", "")

  AllCountry = re.sub("<span>", "", AllCountry)

  AllCountry = re.sub("<p>", "", AllCountry)

  AllCountry = re.sub("</p>", "", AllCountry)

  return AllCountry 

 

def query(province):

  table = PrettyTable(['地区', '确诊', '死亡', '治愈'])

 

  for (k, v) in province.items():

    name = k

    table.add_row([name, v[0] if v[0] != 0 else '-', v[1] if v[1] != 0 else '-', v[2] if v[2] != 0 else '-'])

  if len(province.keys()) != 0:

    print(table)

  else:

    print("暂无")

 

def getInfo(text):

  text = str(text)

  text = re.sub("<p class=\"descText___Ui3tV\">", "", text)

  text = re.sub("</p>", "", text)

  return text

 

def is_json(json_str):

  try:

    json.loads(json_str)

  except ValueError:

    return False

  return True

 

def ff(str, num):

  return str[:num] + str[num+1:]

     

 

def main():

  url = "https://3g.dxy.cn/newh5/view/pneumonia"

 

  try:

    headers = {}

    headers['user-agent'] = 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36' #http头大小写不敏感

    headers['accept'] = 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8'

    headers['Connection'] = 'keep-alive'

    headers['Upgrade-Insecure-Requests'] = '1'

 

    r = requests.get(url, headers=headers)

    r.raise_for_status()

    r.encoding = r.apparent_encoding

    soup = BeautifulSoup(r.text,'lxml')

    table = PrettyTable(['地区', '确诊', '死亡', '治愈'])

    table.hrules = ALL

 

    #### 截至时间

    # TitleTime = getTime(soup.select('.title___2d1_B'))

     

    print()

    # print("       ",TitleTime + "\n")

 

    while True:

      r = requests.get("https://service-f9fjwngp-1252021671.bj.apigw.tencentcs.com/release/pneumonia")

      json_str = json.loads(r.text)

      if json_str['error'] == 0:

        break

 

    print("==================================全国数据==================================")

    print()

     

    print("   确诊 " + str(json_str['data']['statistics']['confirmedCount']) + " 例"

      + "    " + "疑似 " + str(json_str['data']['statistics']['suspectedCount']) + " 例"

      + "    " + "死亡" + str(json_str['data']['statistics']['deadCount']) + " 例"

      + "    " + "治愈" + str(json_str['data']['statistics']['curedCount']) + " 例\n")

 

    print("==================================相关情况==================================")

    print()

 

    print("传染源:" + json_str['data']['statistics']['infectSource'])

    print("病毒:" + json_str['data']['statistics']['virus'])

    print("传播途径:" + json_str['data']['statistics']['passWay'])

    print(json_str['data']['statistics']['remark1'])

    print(json_str['data']['statistics']['remark2'] + "\n")

       

    print("==================================国内情况==================================")

    print()

     

    json_provinces = re.findall("{\"provinceName\":(.*?)]}", str(soup))

 

    idx = 0

    for province in json_provinces:

      if is_json(province):

        pass

 

      else:

        province = "{\"provinceName\":" + province + "]}"

        province = json.loads(province)

         

      province_name = province['provinceShortName'] if province['provinceShortName'] != 0 else '-'

      confirmed = province['confirmedCount'] if province['confirmedCount'] != 0 else '-'

      suspected = province['suspectedCount'] if province['suspectedCount'] != 0 else '-'

      cured = province['curedCount'] if province['curedCount'] != 0 else '-'

      dead = province['deadCount'] if province['deadCount'] != 0 else '-'

      table.add_row([province_name, confirmed, dead, cured])

      map[province_name] = idx

      idx = idx + 1

      for city in province['cities']:

        provinces_idx[map[province_name]][city['cityName']] = [city['confirmedCount'], city['deadCount'], city['curedCount']]

 

    print(table)

     

     

    print()

    print("==================================国外情况==================================")

    print()

 

    json_provinces = str(re.findall("\"id\":949(.*?)]}", str(soup)))

    json_provinces = json_provinces[:1] + "{\"id\":949" + json_provinces[2:]

    json_provinces = json_provinces[:len(json_provinces) - 2] + json_provinces[len(json_provinces) - 1:]

    provinces = json.loads(json_provinces)

 

    table = PrettyTable(['地区', '确诊', '死亡', '治愈'])

    for province in provinces:

      confirmed = province['confirmedCount'] if province['confirmedCount'] != 0 else '-'

      dead = province['deadCount'] if province['deadCount'] != 0 else '-'

      cured = province['curedCount'] if province['curedCount'] != 0 else '-'

      table.add_row([province['provinceName'], confirmed, dead, cured])

     

    print(table)

    print()

     

    print("==================================最新消息==================================")

    print()

     

       

    idx = 0

    for news in json_str['data']['timeline']:

      if idx == 5:

        break

      print(news['pubDateStr'] + " " + news['title'])

      idx = idx + 1

     

 

    print()

    key = input("请输入您想查询详细信息的省份,例如 湖北\n")

    print()

    if key in map.keys():

      query(provinces_idx[map[key]])

    else:

      print("暂无相关信息")

       

    print("\n欢迎提出各种意见")

  except:

    print("连接失败")

 

if __name__ == '__main__':

  main()

  sleep(30)

以上就是Python实时数据采集-新型冠状病毒的详细内容,大家出门要做好安全措施,感谢对三水点靠木的支持。

Python 相关文章推荐
Python程序设计入门(2)变量类型简介
Jun 16 Python
用Python中的__slots__缓存资源以节省内存开销的方法
Apr 02 Python
开始着手第一个Django项目
Jul 15 Python
使用Python生成随机密码的示例分享
Feb 18 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
使用pandas的DataFrame的plot方法绘制图像的实例
May 24 Python
解决pycharm remote deployment 配置的问题
Jun 27 Python
对Python _取log的几种方式小结
Jul 25 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
python实现低通滤波器代码
Feb 26 Python
深入了解Python enumerate和zip
Jul 16 Python
详解Django中 render() 函数的使用方法
Apr 22 Python
在tensorflow中实现屏蔽输出的log信息
Feb 04 #Python
Python变量作用域LEGB用法解析
Feb 04 #Python
如何在python开发工具PyCharm中搭建QtPy环境(教程详解)
Feb 04 #Python
TensorFlow基本的常量、变量和运算操作详解
Feb 03 #Python
Tensorflow轻松实现XOR运算的方式
Feb 03 #Python
Tensorflow不支持AVX2指令集的解决方法
Feb 03 #Python
基于Python3.6中的OpenCV实现图片色彩空间的转换
Feb 03 #Python
You might like
php实现zip压缩文件解压缩代码分享(简单易懂)
2014/05/10 PHP
Laravel框架实现的上传图片到七牛功能详解
2019/09/06 PHP
ThinkPHP 5.x远程命令执行漏洞复现
2019/09/23 PHP
Chrome Form多次提交表单问题的解决方法
2011/05/09 Javascript
JS 如果改变span标签的是否隐藏属性
2011/10/06 Javascript
javascript检测对象中是否存在某个属性判断方法小结
2013/05/19 Javascript
jquery上传插件fineuploader上传文件使用方法(jquery图片上传插件)
2013/12/05 Javascript
js给网页加上背景音乐及选择音效的方法
2015/03/03 Javascript
jQuery使用hide方法隐藏元素自身用法实例
2015/03/30 Javascript
JavaScript实现九九乘法表的简单实例
2016/06/07 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Bootstrap Table 删除和批量删除
2017/09/22 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
微信小程序调用微信支付接口的实现方法
2019/04/29 Javascript
vue+django实现一对一聊天功能的实例代码
2019/07/17 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
浅谈python字典多键值及重复键值的使用
2016/11/04 Python
Python学习小技巧之列表项的排序
2017/05/20 Python
python 系统调用的实例详解
2017/07/11 Python
详解Golang 与python中的字符串反转
2017/07/21 Python
Python cookbook(字符串与文本)在字符串的开头或结尾处进行文本匹配操作
2018/04/20 Python
python实现人民币大写转换
2018/06/20 Python
解决python 未发现数据源名称并且未指定默认驱动程序的问题
2018/12/07 Python
python实现比较类的两个instance(对象)是否相等的方法分析
2019/06/26 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
浅析Python 条件控制语句
2020/07/15 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
python热力图实现简单方法
2021/01/29 Python
css3实现垂直下拉动画菜单示例
2014/04/22 HTML / CSS
什么是java序列化,如何实现java序列化
2012/11/14 面试题
财务会计毕业生个人求职信
2014/02/03 职场文书
乡镇干部党的群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
离婚财产分配协议书
2014/10/21 职场文书
张丽莉观后感
2015/06/16 职场文书
react中useState使用:如何实现在当前表格直接更改数据
2022/08/05 Javascript
Windows server 2016服务器基本设置
2022/08/14 Servers