目前,随着新型冠状病毒(COVID-19)的全球范围内蔓延,海外地区现有确诊已经上升至 293683 (数据更新至 2020.03.25 16:54) 。为了更好了保证自身健康,我们必须了解正在影响⽣活所在地区的实际统计数据。

如何利用现有工具来事实追踪病情分布呢?近日,一个有趣的开源项目正好解决了这一问题。只需一台电脑,谁都可按照步骤利用 Python 获得专属个人的疫情信息。作者发布了文章介绍该操作过程,雷锋网 AI 源创评论将其编译如下。

图片来源:Sebastian Herrmann on Unsplash

Web 爬虫计划

我们将使⽤Web 爬虫的⽅法,以及 Selenium(Web 爬虫的一个库)和 Python⼯具来完成这一计划。

首先,我们需要找到要从中获取数据的网站,在本次教程中,使⽤到的是 Worldometers( https://www.worldometers.info/ ),因为作者觉得这上面的数据⾮常准确,并且⽹站看起来不错~

下面开始进入计划:

在 Worldometers 上的表格中,显示了每个受影响国家/地区的相关数据,包括:累计确诊病例、新增病例、累计死亡人数、累计治愈人数,以及病危程度的人数统计等。

我们要做的,就是将以上的各个详细数据,通过一系列方法的转化,使其能够自动发到我们的电子邮箱中。当然,选择其它包含这些数据的网站,也不是不可以。

搭建环境

首先,我们需要安装 ChromeDriver,并进行环境搭建。

ChromeDriver 将帮助我们能够控制浏览器并向其发送命令,从而进⾏测试和之后的其它操作,可以通过链接( https://chromedriver.chromium.org/ )下载与你电脑系统相匹配的安装包。

Ps:如果你不是很熟悉 ChromeDriver,建议尽可能使用最新稳定版本。

下载之后,接下来将需要解压所下载的文件,建议右键单击「文件」,然后选择「Extract Here」,手动进行解压操作。

之后你会发现在该⽂件夹内,有⼀个名为「chromedriver」的⽂件,我们需要按照下面的步骤将其移⾄计算机上的特定⽂件夹。

  • 第一步,打开终端并输⼊以下命令:

sudo su#进⼊root 模式 cd

#从当前位置返回到基础 mv / home / *your_pc_name * / Downloads / chromedriver / usr / local / bin

#将⽂件移动到正确的位置

注意:其中的「*your_pc_name *」部分,需要替换为所用计算机的实际名称。

  • 第二步,打开编辑器,作者选择的是 Visual Studio Code( https://code.visualstudio.com/)。

  • 第三步,新建一个项⽬,并创建两个新⽂件。可参考下面作者的设置:

Visual Studio Code—项目设置

并且可以发现,在 VS Code 中有⼀个「Terminal」选项,可以⽤它在 VS Code 中打开内部终端。

第四步,安装虚拟环境和⽤于 Web 爬虫驱动程序的 selenium 工具,并在终端中键⼊下面这些命令:

pip3 install virtualenv

source venv / bin / activate

pip3 install selenium

最后激活虚拟环境,我们的准备工作就完成了。

开始编码

现在,我们完成对环境的搭建以及掌握所需信息获取地址后,就要开始做「编码实现」部分了。

我们将为其创建为⼀个类以及函数,使⽤任何名称创建即可,然后启动 Chrome 驱动程序:

class Coronaviru():

def __init __(self):

self.driver = webdriver.Chrome()

然后,转到 VS Code 内部终端并输⼊下面的代码,此命令使我们可以将⽂件作为交互式场所:

python -i coronavirus.py

之后,将浏览器的新标签页打开,我们开始向其发出命令。(如果想进⾏实验,可以使⽤命令⾏代替在源⽂件中键⼊命令⾏)

对于终端,命令为:

bot = Coronavirus()

bot.driver.get('https://www.worldometers.info/coronavirus/')

现在,使其获取源代码:

self.driver.get('https://www.worldometers.info/coronavirus/')

当我们进⼊⽹站时,我们需要提取所选网页中的表格。因此,我们将以这种⽅式进⾏操作,将表格作为 Web 元素并将其保存在「表」下。

为了在⽹页上找到该元素,我们使⽤ find_element_by_xpath()并使⽤其定义的 ID 对其进⾏过滤。

table = self.driver.find_element_by_xpath('//*

[@id="main_table_countries"]/tbody[1]')

在该表中,通过对应的名称,确保要找到我们最初需要获取国家或地区。

country_element = table.find_element_by_xpath(「// td

[contains(text(),'China')]」))

再次使⽤XPath,我们尝试使用「China」的数据。由于我们需要「China」旁边的数据,因此我们必须确保它属于该⾏,这就是为什么要从 country_element 中获取父节点:

row = country_element.find_element_by_xpath("./..")

在该⾏内,我们获取了所需的所有数据,我们将该字符串拆分为每⼀列,并将其保存为变量:

data = row.text.split(" ")

total_cases = data[1]

new_cases = data[2]

total_deaths = data[3]

new_deaths = data[4]

active_cases = data[5]

total_recovered = data[6]

serious_critical = data[7]

其中,「data」是⼀个来⾃字符串拆分的列表,然后我们将其分散到不同的变量中以备后⽤。

发送电⼦邮件

在完成编码部分之后,我们就要进入电子邮件发送部分了。

首先,需要设置电⼦邮件发送服务器。作者用到了 Google 帐户服务,然后进⼊「应⽤程序密码」,在那⾥⽣成⼀个新密码并在所写脚本程序中使⽤它。

然后,我们将通过以下代码,为我们将收到的电⼦邮件制作模板:

def send_mail(country_element, total_cases, new_cases, total_deaths, new_deaths, active_cases, total_recovered, serious_critical):

server = smtplib.SMTP('smtp.gmail.com', 587)

server.ehlo()

server.starttls()

server.ehlo()

server.login('email', 'password')

subject = 'Coronavirus stats in your country today!'

body = 'Today in ' + country_element + '\

\nTotal cases: ' + total_cases +'\

\nNew cases: ' + new_cases + '\

\nTotal deaths: ' + total_deaths + '\

\nNew deaths: ' + new_deaths + '\

\nActive cases: ' + active_cases + '\

\nTotal recovered: ' + total_recovered + '\

\nSerious, critical cases: ' + serious_critical + '\

\nCheck the link: https://www.worldometers.info/coronavirus/'

msg = f"Subject: {subject}\n\n{body}"

server.sendmail(

'Coronavirus',

'email',

msg

)

print('Hey Email has been sent!')

server.quit()

这样,就能够实现单次的最新疫情信息获取了。如果你希望每天重复执⾏此脚本,可以通过下面链接中的编码实现:

https://stackoverflow.com/questions/15088037/python-script-to-do-something-at-the-same-time-every-day

成功订阅!

最后,我们就得到了自制的邮件订阅啦~(如下所示)

电子邮件形式成功

当然,除了可以将我们所在地区的新冠病毒最新情况发到个人邮箱外,通过这样的方法,举一反三,你想订阅的其它资讯也可以自定义发送,而且还没有任何广告~

而在此,也再次提醒所有朋友,在目前疫情持续情况下,一定要勤洗手、戴口罩;同时,尽可能避免与他⼈进⾏过多的⾝体接触。

原文地址:

https://towardsdatascience.com/how-to-track-coronavirus-with-python-a5320b778c8e

完整开源代码 Github 地址:

https://github.com/lazargugleta/coronavirusStats/blob/master/coronavirus.py

Python 实现新冠病毒分布实时追踪相关推荐

  1. 只需一台电脑,人人都可用 Python 实现新冠病毒分布实时追踪

    雷锋网 AI 源创评论: 目前,随着新型冠状病毒(COVID-19)的全球范围内蔓延,海外地区现有确诊已经上升至 293683 (数据更新至 2020.03.25 16:54) .为了更好了保证自身健 ...

  2. python新冠病毒COVID-19数据分析和数据可视化

    在全球范围内,截至2021 年 11 月 15 日欧洲中部时间下午 4:30,各国已向世卫组织报告了253,163,330(2.5亿)例COVID-19确诊病例,包括5,098,174(5百万)例死亡 ...

  3. 检测、量化、追踪新冠病毒,基于深度学习的自动CT图像分析有多靠谱?

    作者 | Ophir Gozes, Maayan Frid-Adar等 译者 | 刘畅 出品 | AI科技大本营(ID:rgznai100) 背景:新冠病毒的传播非常迅速,并对数十亿人的生活产生了重大 ...

  4. [转载] python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    参考链接: Python vars() python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造 ...

  5. 基于Python实现的全球新冠病毒数据分析

    1. 问题描述 找一个有全球新冠病毒数据的网站,爬取其中的数据(禁止使用数据接口直接获取数据).要求爬取从 2020 年 12 月 1 日开始的连续 15 天的数据,国家数不少于 100 个. 2. ...

  6. python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器)

    python+selenium定时爬取丁香园的新冠病毒每天的数据,并制作出类似的地图(部署到云服务器) 声明:仅供技术交流,请勿用于非法用途,如有其它非法用途造成损失,和本博客无关 目录 python ...

  7. 扎克伯格:Facebook不会把位置数据交给政府,哪怕是用于追踪新冠病毒!

    数据猿报道 最新招聘公告: ①阿里数据中台品牌团队杭州四大职位虚位以待 ②蚂蚁金服大数据部2020实习生招募全面启动 ③TalkingData北京招资深银行行业BD... ④数数科技上海招大数据运维支 ...

  8. python新冠病毒泡泡堂游戏

    python新冠病毒泡泡堂游戏,音乐,素材,可执行文件 等下载网址: 链接:https://pan.baidu.com/s/1F359-kUuGHYznrjXPfZoxw 提取码:fne9 pytho ...

  9. 新冠病毒侵入人体全过程!从脚趾到大脑,科学家追踪到病毒对身体的巨大摧残...

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 大数据文摘出品 来源:Science 编译:千雪.张大笔茹 事情是这样的. 在杜兰大学 ...

最新文章

  1. Java培训一共分几个阶段
  2. mysql存储引擎之myisam学习
  3. android fm模块学习,AndroidFM模块学习之5关闭FM流程
  4. 让TA们告诉你,疫情当下如何更彪悍的成长
  5. python验证码重叠_用Python机器学习搞定验证码
  6. Spring Cloud —— Feign 实现服务调用
  7. selenium +chrome headless Adhoc模式渲染网页
  8. 电脑字体在哪个文件夹_【安卓】造字(下):如何将生成的字体设置为手机系统显示字体...
  9. python传递参数*与**
  10. python AttributeError: 'module' object has no attribute 'dumps'解决办法
  11. OLED驱动芯片SSD1306解读
  12. 如何使用MyBatis-Plus中的代码生成器?
  13. 飞图FLYTOUAV垂起固定翼无人机采用交叉环绕飞行搭载单镜头相机做高精度,高效率,长航时,大比例尺地籍测量中应用
  14. 再看iOS如何使用SM2/SM3/SM4/SM9 方法二:使用http://gmssl.org这个开源密码箱来实现从编译到使用
  15. js字符串时间格式与中国标准时间格式相互转换
  16. 背景图页面缩小会变形_CSS背景图拉伸不变形
  17. 小白深度学习起步中——读取人像图像
  18. 根据硬件ID查看摄像头型号方案,可查任何一款摄像头芯片来源
  19. luogu P1600 天天爱跑步
  20. 【洛谷4996】咕咕咕

热门文章

  1. Laravel服务提供者在平台短信服务中的应用
  2. node.js之require
  3. Android性能优化之内存篇
  4. 使用Docker搭建Consul集群
  5. android104 帧动画,补间动画,属性动画
  6. 锋利的js前端分页之jQuery
  7. Java开发常用工具类
  8. centos 6.2 升级后无法启动图形界面
  9. 如何创建自定义性能计数器
  10. TyepScript入门教程 之 async await