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 相关文章推荐
pycharm 使用心得(三)Hello world!
Jun 05 Python
Python中还原JavaScript的escape函数编码后字符串的方法
Aug 22 Python
python写的一个squid访问日志分析的小程序
Sep 17 Python
Python计算三角函数之asin()方法的使用
May 15 Python
python字符串的常用操作方法小结
May 21 Python
python3下实现搜狗AI API的代码示例
Apr 10 Python
浅谈Python基础—判断和循环
Mar 22 Python
Python闭包和装饰器用法实例详解
May 22 Python
tesserocr与pytesseract模块的使用方法解析
Aug 30 Python
使用python脚本自动创建pip.ini配置文件代码实例
Sep 20 Python
python 获取域名到期时间的方法步骤
Feb 10 Python
详解Django的MVT设计模式
Apr 29 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下对数组进行排序的函数
2010/08/08 PHP
Session保存到数据库的php类分享
2011/10/24 PHP
JavaScript表单常用验证集合
2008/01/16 Javascript
JS日期和时间选择控件升级版(自写)
2013/08/02 Javascript
jQuery实现可用于博客的动态滑动菜单
2015/03/09 Javascript
jQuery简单倒计时效果完整示例
2016/09/20 Javascript
AngularJs上传前预览图片的实例代码
2017/01/20 Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
2017/02/27 Javascript
jQuery插件HighCharts实现的2D对数饼图效果示例【附demo源码下载】
2017/03/09 Javascript
js实现多张图片延迟加载效果
2017/07/17 Javascript
Vue 表单控件绑定的实现示例
2017/08/11 Javascript
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
vue实现搜索功能
2019/05/28 Javascript
jQuery与原生JavaScript选择HTML元素集合用法对比分析
2019/11/26 jQuery
解决vue项目中某一页面不想引用公共组件app.vue的问题
2020/08/14 Javascript
Python读写unicode文件的方法
2015/07/10 Python
21行Python代码实现拼写检查器
2016/01/25 Python
Python实现的科学计算器功能示例
2017/08/04 Python
Linux 修改Python命令的方法示例
2018/12/03 Python
Python输出\u编码将其转换成中文的实例
2018/12/15 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
2019/04/11 Python
Windows下pycharm创建Django 项目(虚拟环境)过程解析
2019/09/16 Python
将tf.batch_matmul替换成tf.matmul的实现
2020/06/18 Python
野兽派官方旗舰店:THE BEAST 野兽派
2016/08/05 全球购物
钳工实习自我鉴定
2013/09/19 职场文书
医院总经理职责
2013/12/26 职场文书
工程建设实施方案
2014/03/14 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
二年级上册数学教学计划
2015/01/20 职场文书
给医院的感谢信
2015/01/21 职场文书
入党后的感想
2015/08/10 职场文书
Nginx限流和黑名单配置
2022/05/20 Servers
Python实现仓库管理系统
2022/05/30 Python