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网络编程学习笔记(一)
Jun 09 Python
跟老齐学Python之网站的结构
Oct 24 Python
使用Python的Flask框架表单插件Flask-WTF实现Web登录验证
Jul 12 Python
利用Python抓取行政区划码的方法
Nov 28 Python
python使用pil库实现图片合成实例代码
Jan 20 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
Jul 06 Python
python实现比较类的两个instance(对象)是否相等的方法分析
Jun 26 Python
python移位运算的实现
Jul 15 Python
DJANGO-URL反向解析REVERSE实例讲解
Oct 25 Python
python else语句在循环中的运用详解
Jul 06 Python
python爬虫判断招聘信息是否存在的实例代码
Nov 20 Python
python中最小二乘法详细讲解
Feb 19 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
虫族 Zerg 魔法科技
2020/03/14 星际争霸
先进的自动咖啡技术,真的可以取代咖啡师吗?
2021/03/06 冲泡冲煮
PHP4实际应用经验篇(7)
2006/10/09 PHP
一个经典的PHP验证码类分享
2014/11/18 PHP
PHP的Socket通信之UDP通信实例
2015/07/02 PHP
php利用ob_start()清除输出和选择性输出的方法
2018/01/18 PHP
JavaScript方法和技巧大全
2006/12/27 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
拖动布局之保存布局页面cookies篇
2010/10/29 Javascript
Jquery知识点二 jquery下对数组的操作
2011/01/15 Javascript
jquery导航制件jquery鼠标经过变色效果示例
2013/12/05 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
js获取字符串字节数方法小结
2015/06/09 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
JavaScript计算值然后把值嵌入到html中的实现方法
2016/10/29 Javascript
localStorage的黑科技-js和css缓存机制
2017/02/06 Javascript
微信小程序中使用ECharts 异步加载数据的方法
2018/06/27 Javascript
echarts实现地图定时切换散点与多图表级联联动详解
2018/08/07 Javascript
vue组件开发之用户无限添加自定义填写表单的方法
2018/08/28 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
原生js实现获取form表单数据代码实例
2019/03/27 Javascript
Layui Table js 模拟选中checkbox的例子
2019/09/03 Javascript
vue Treeselect 树形下拉框:获取选中节点的ids和lables操作
2020/08/15 Javascript
python的re模块使用方法详解
2019/07/26 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
利用Python实现某OA系统的自动定位功能
2020/05/27 Python
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
英国时尚服饰电商:Boohoo
2017/10/12 全球购物
台湾母婴用品限时团购:妈咪爱
2018/08/03 全球购物
电子商务优秀毕业生求职信
2014/07/11 职场文书
2014年质量工作总结
2014/11/22 职场文书
忠犬八公的故事观后感
2015/06/05 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
投资入股协议书
2016/03/22 职场文书
python使用XPath解析数据爬取起点小说网数据
2021/04/22 Python
Java中的Kafka为什么性能这么快及4大核心详析
2022/09/23 Java/Android