从新浪微博上获取疫情最新信息
# -*- coding:utf-8 -*-
"""
Author: Edgar
Created time:2/1/2020 12:06 PM
爬取新浪微博中的相关信息
"""
import os
import json
import requests
import pymysqlclass Virus(object):def __init__(self):super(Virus, self).__init__()self.url = "https://interface.sina.cn/news/wap/fymap2020_data.d.json"self.header = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"}def get_json(self):"""获取加载出来的json"""response = requests.get(self.url, self.header)try:response.raise_for_status()except:print("获取json文件失败")else:return response.json()def download_json(self, filename='data.json'):"""下载json文件"""flag = Truejson_ = self.get_json()print(json_)if not os.path.exists(filename):with open(filename, "w") as file:json.dump(json_, file)else:while flag:answer = input("该目录已经存在文件 %s,是否删除该文件(y/n): " % filename)if answer in ['y', 'Y']:with open(filename, 'w') as file:json.dump(json_, file)flag = Falseelif answer in ['n', 'N']:returnelse:print("输入错误,请重新输入: ")@staticmethoddef create_table():connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')cursor = connect.cursor()# 创建一个表来保存每个省市的信息sql = "CREATE TABLE IF NOT EXISTS Virus_province(name VARCHAR(60) NOT NULL, ename varchar(20), value varchar(20), susNum varchar(20), deathNum varchar(20), cureNum varchar(20), city TEXT)"cursor.execute(sql)# 创建一个表来保存所有相关城市的相关信息sql = "CREATE TABLE IF NOT EXISTS Virus_city(province VARCHAR(20),name VARCHAR(20) NOT NULL ,conNum VARCHAR(20), susNum VARCHAR(20), cureNum VARCHAR(20), deathNum VARCHAR(20))"cursor.execute(sql)# 保存全球疫情信息sql = "CREATE TABLE IF NOT EXISTS Virus_world(name VARCHAR(20), value VARCHAR(20), susNum VARCHAR(20), deathNum VARCHAR(20), cureNum VARCHAR(20))"cursor.execute(sql)sql = "CREATE TABLE IF NOT EXISTS Virus_timeline(url varchar(100), title varchar(200), media varchar(40), date varchar(30));"cursor.execute(sql)connect.commit()cursor.close()connect.close()@staticmethoddef insert_city(city):connect = pymysql.connect("localhost", 'root', "Edgar", 'virus')cursor = connect.cursor()sql = 'INSERT INTO virus_city(province,name, conNum, susNum, cureNum, deathNum) VALUES ("%s", "%s", "%s","%s","%s", "%s")' % (city.get("province"),city.get("name"),city.get("conNum"),city.get("susNum"),city.get("cureNum"),city.get("deathNum"))cursor.execute(sql)connect.commit()cursor.close()connect.close()@staticmethoddef insert_province(province):connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')cursor = connect.cursor()sql = 'INSERT INTO virus_province(name, ename, value, susNum, deathNum, cureNum, city) VALUES("%s","%s","%s","%s","%s","%s","%s")' % (province.get("name"),province.get("ename"),province.get("value"),province.get("susNum"),province.get("deathNum"),province.get("cureNum"),",".join([i.get("name") for i in province.get("city")]))cursor.execute(sql)connect.commit()cursor.close()connect.close()@staticmethoddef insert_world(world):connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')cursor = connect.cursor()sql = 'INSERT INTO virus_world(name, value, susNum, deathNum, cureNum) VALUES ("%s","%s","%s","%s","%s")' % (world.get("name"), world.get("value"), world.get("susNum"),world.get("deathNum"), world.get("cureNum"))cursor.execute(sql)connect.commit()cursor.close()connect.close()@staticmethoddef insert_timeline(data):connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')cursor = connect.cursor()sql = "INSERT INTO virus_timeline(url, title, media, date) VALUES('%s','%s','%s','%s')" % (data.get("url"), data.get("title"), data.get("media"),data.get("date"))cursor.execute(sql)connect.commit()cursor.close()connect.close()def upload_data(self):data_json = self.get_json()data = data_json.get("data").get("list")for i in data:self.insert_province(i)for city in i.get("city"):city["province"] = i.get("name")self.insert_city(city)for world in data_json.get("data").get("worldlist"):self.insert_world(world)self.get_timeline()def refresh_data(self):connect = pymysql.connect("localhost", 'root', 'Edgar', 'virus')cursor = connect.cursor()sql = 'TRUNCATE TABLE virus_province;'cursor.execute(sql)sql = "TRUNCATE TABLE virus_city;"cursor.execute(sql)sql = "TRUNCATE TABLE virus_world;"cursor.execute(sql)sql = "TRUNCATE TABLE virus_timeline;"cursor.execute(sql)connect.commit()cursor.close()connect.close()self.upload_data()def get_timeline(self):"""获取timeline中的信息"""url = "https://interface.sina.cn/wap_api/wap_std_subject_feed_list.d.json?component_id=_conf_13|wap_zt_std_theme_timeline|http://news.sina.cn/zt_d/yiqing0121&page={}"count = 0while True:response = requests.get(url.format(count), headers=self.header)try:response.raise_for_status()except:returnelse:data = response.json().get("result").get("data").get("data")if data:count += 1for i in data:self.insert_timeline(i)else:returnif __name__ == '__main__':virus = Virus()# virus.create_table()# virus.download_json()# virus.upload_data()virus.refresh_data()# virus.get_timeline()
爬取部分内容如下:
virus_world
:
name | value | susNum | deathNum | cureNum |
---|---|---|---|---|
中国 | 14411 | 19544 | 304 | 328 |
德国 | 8 | 3 | 0 | 0 |
西班牙 | 1 | 0 | 0 | 0 |
俄罗斯 | 2 | 0 | 0 | 0 |
柬埔寨 | 1 | 0 | 0 | 0 |
印度 | 2 | 0 | 0 | 0 |
virus_city
:
province | name | conNum | susNum | cureNum | deathNum |
---|---|---|---|---|---|
北京 | 海淀区 | 41 | 0 | 0 | 0 |
北京 | 怀柔区 | 1 | 0 | 0 | 0 |
北京 | 丰台区 | 16 | 0 | 0 | 0 |
北京 | 大兴区 | 22 | 0 | 0 | 0 |
北京 | 东城区 | 3 | 0 | 0 | 0 |
北京 | 昌平区 | 12 | 0 | 0 | 0 |
北京 | 西城区 | 22 | 0 | 0 | 0 |
北京 | 朝阳区 | 35 | 0 | 0 | 0 |
北京 | 石景山区 | 5 | 0 | 0 | 0 |
最新代码见 GitHub
从新浪微博上获取疫情最新信息相关推荐
- 在树莓派上使用 PowerShell 调用 Azure 上的 .NET Core API 获取疫情数据
点击上方蓝字关注"汪宇杰博客" 导语 最近因为疫情被关在家里,做了个无聊成就:我们将在树莓派上用 PowerShell 调用 Azure 上的一个 .NET Core 写的 API ...
- 利用Python实现新冠疫情数据可视化(获取疫情历史数据,制作南丁格尔玫瑰图、疫情地图、动态疫情组合图、词云)
文章目录 前言 1.获取疫情历史数据 2.制作南丁格尔玫瑰图 2.1 全球各国确诊人数玫瑰图 2.2 全国各省市零新增天数玫瑰图 3.制作疫情地图 3.1全国各省市目前确诊总人数疫情地图 3.2全球各 ...
- Java 获取疫情数据
展示效果上图 1.小程序传appid @ApiOperation(value = "获取疫情数据") @GetMapping("/getCoivd") publ ...
- 众志成城抗疫情:Python获取疫情实时数据!!
前文 防护篇: 各自家庭聚团圆,不要外出相互窜. 注意洗手衣勤换,戴上口罩防感染. 野生动物传染源,千万不要因嘴馋. 每天食用调配餐,清热食物桌上端. 防寒添衣要保暖,通风透气舒适感. 清洁卫生干一 ...
- ua获取手机型号_取证人员为什么很难从移动设备上获取电子数据证据?
"法拉第袋" 英文名为Faraday bag 移动设备是动态系统,在提取和分析电子数据证据时会给取证人员带来很多挑战.来自不同制造商的不同型号的手机的数量的快速增加使得难以开发用于 ...
- 使用Idea从github上获取项目
转载自:https://www.cnblogs.com/30go/p/7909246.html 整体分三步: 下载和安装git 配置idea 从git获取项目 详细步骤: 1. 下载和安装git 下载 ...
- 从Jenkins或Gerrit上获取拉代码和编译命令
从Jenkins或Gerrit上获取拉代码和编译命令 在解一个新平台的bug时,有时候我们需要去拉新平台的代码和知道编译命令,这时候我们一般是去找对应的release manager或去问SPM,这其 ...
- c++如何获取文件时间_如何在Windows 10上获取文件或文件夹的所有权
要访问Windows 10上的任何文件或文件夹,你必须具有相应的权限.遗憾的是,如果你没有编辑某些文件和文件夹的权限,则可能会出现某些问题,这时你必须对该文件夹或文件取得所有权. 要想取得某个文件夹的 ...
- Android之从网络上获取图片的两种方式讲解:thread+handle和AsyncTask方式
从网络上获取图片是一个比较耗时的操作,放在主线程会导致阻塞主线程,响应超时,所以我们不能把它放在主线程里操作,必须放在一个子线程里,我打算采用两种方式去实现.1.采用thread去获取图片,获取到后通 ...
最新文章
- 云炬VB开发笔记 1初始Visual Basic基础
- javascript --- repeat的用处
- 【软件开发底层知识修炼】二十八 C/C++中volatile的作用
- PL/SQL数据类型
- 一台计算机要两个内网,局域网如何在一台电脑上设置两个IP地址
- linux下的p2p终结者
- 科研ABC - 会议海报制作
- breakall lisp文件_CAD图导入SU中一次成面的方法
- (自我归纳)费曼学习法
- 双色球(过滤历史数据+过滤连号+红球包含+篮球包含+大小分布)
- mysql ix锁_mysql锁详解
- xshell和xftp免费使用方法
- 火爆!联想Z5首售15分钟全网告罄力夺京东单品榜冠军
- java ssm人体健康体检信息管理系统-
- [生存志] 第122节 金匮真言脉要精微
- 基于Spark的巨型矩阵分布式LU计算求逆【第一篇】
- 《30岁之前的每一天》阅读笔记(一)
- 关于STM32单片机IAP升级中if(((*(__IO uint32_t*)ulAddr_App) 0x2FFE0000) == 0x20000000)语句的理解
- 解决没有conio.h中的gotoxy()问题
- 华为云ECS - 学习/实践
热门文章
- 基于JavaSwing开发聊天室(QQ聊天 群聊)系统+论文+PPT 大作业 毕业设计项目源码
- Lodop页面总提示未安装或请升级的可能原因
- 谷歌cartographer+EAI的YDLIDAR-X4激光雷达建图实现(二)
- Scala:为简单而生长
- Android 多语言 plurals 的使用 手机语言中文的话是无效的哦
- 显示HWC合成(hwc_display_contents_1_t,hwc_layer_1_t数据结构关系)
- 准确率、精确率、召回率、F1值学习笔记
- SCIP求解整数规划实例
- 什么是currentColor
- windows7的用户账户控制每次重启计算机时都会被关闭,win7系统更改设置总是弹出用户账户控制的解决方法...