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

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

图片来源:Sebastian Herrmann on Unsplash

Web 爬虫计划

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

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

下面开始进入计划:

在 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
关注公众号:编程学习营,送Python入门学习资料+源码+思维导图

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

开始编码

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

我们将为其创建为⼀个类以及函数,使⽤任何名称创建即可,然后启动 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]
关注公众号:编程学习营,送Python入门学习资料+源码+思维导图

其中,「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()
关注公众号:编程学习营,送Python入门学习资料+源码+思维导图

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

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. 云计算下的商业雨:全世界只需要5台电脑

    云计算是一种基于因特网的超级计算模式,在远程的数据中心里,成千上万台电脑和服务器连接成一片电脑云-一个浪漫的比喻-用户通过电脑.笔记本.手机等方式接入数据中心,按自己的需求进行运算.  IBM的创立者 ...

  2. 只需一台手机,熬夜剪辑视频赚了1531块,没有颜值才艺也可以

    只需一台手机!熬夜剪辑视频赚了1531块,没有颜值才艺也可以,也有不少粉丝想要做视频剪辑. 具体要怎么做呢? 一.账号注册 电脑端在网页搜索,手机端在应用商店内搜索想要注册运营的自媒体平台名称,下载并 ...

  3. 人人都有发言权的新媒体时代 内容审核需亮剑

    "人人都有发言权"的新媒体打破了传统的新闻传播机构对新闻传播的垄断格局,完善了社会公共领域,但是在发展的过程中也存在着很多问题亟待解决. 1."某书APP推送未成年人身体 ...

  4. 只需十四步:从零开始掌握 Python 机器学习(附资源)

    分享一篇来自机器之心的文章.关于机器学习的起步,讲的还是很清楚的.原文链接在:只需十四步:从零开始掌握Python机器学习(附资源) Python 可以说是现在最流行的机器学习语言,而且你也能在网上找 ...

  5. 通过onedrive在多台电脑上编辑同一个python项目

    在多台电脑上编辑同一个python项目 做一个python项目,由于工作原因,白天在单位用单位台式机做,晚上还要在家里用家里的笔记本继续,为了能实现两台电脑完全一致的编辑同一个python项目,经过多 ...

  6. 雷军回应“小米手机都是中低端”;特斯拉CEO埃隆马斯克确认感染新冠病毒;Firefox 83.0发布|极客头条...

    整理 | 郑丽媛 头图 | CSDN 下载自东方 IC 快来收听极客头条音频版吧,智能播报由出门问问「魔音工坊」提供技术支持. 「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「 ...

  7. 这一年人们都在搜索什么?谷歌发布2020年度搜索热榜,「新冠病毒」高居榜首

    CDA数据分析师 出品 编译:Mika [导读]谷歌发布2020年的搜索热榜!来看看今年大家都在关心什么吧. 当感到疑惑.不确定时,人们就会去寻找答案.如今遇到这种情况,只需将问题输入搜索引擎即可. ...

  8. 50个云终端只需一台服务器是怎么一回事

    看到这个标题也许有人会说50个云终端只需要一台服务器这应该是不可能的吧,即使是真的那这个服务器的配置和价格应该也要非常高的吧.但是如果有人和你说50个云终端只需要一台中等配置和价格的服务器就可以的呢. ...

  9. 图片复印如何去除黑底_如何用AE制作可爱漂亮闪烁霓虹灯效果?只需简单几步任何人都可以...

    HELLO 大家好,亲们很久不见甚是想念!我是分享AEC4D手机特效小知识的乐乐,今后会定期持续分享一些AE小特效,C4D操作,手机特效,PS修图的原创教程内容,虽然可能只值5毛钱噢,只愿能为大家闲暇 ...

最新文章

  1. SQL Server Lock Escalation - 锁升级
  2. qt 连接mysql
  3. python建站部署_SpringBoot入门建站全系列(三十二)接入xxl-job分布式任务调度平台...
  4. 中专选计算机应用很难,对中专计算机应用基础改革的思考.pdf
  5. uboot启动第二阶段——start_armboot
  6. idea插件Lombok
  7. 2d Laser 和 camera 标定工具原理及使用方法
  8. Java中注解(非注释^_^) --转载
  9. php redis decr_Redis在PHP项目中的实际应用场景
  10. 自定义键盘组件_一文读懂!iOS系统组件的设计规范全解!
  11. k8s部署应用nginx
  12. python写给初学者的一封信
  13. oracle怎么修改表字段长度,Oracle修改表结构字段名和字段长度
  14. 修复:Linux系统机箱前置面板耳机插孔没声音
  15. Xiaojie雷达之路---车载雷达信号处理流程
  16. 无线承载根据承载的内容不同分为SRB和DRB EPS承载根据用户业务需求和Qos的不同可以分为GBR/ Non-GBR 承载...
  17. Pandas数据可视化怎么做?用实战案例告诉你!
  18. php开发路由器界面,PHP制作简单仿路由器登录界面
  19. JAVA-企业微信报警工具类
  20. 文化先锋A6客户端自动登陆

热门文章

  1. 关于音视频里面的 解码帧率 和 渲染帧率
  2. 用数据驱动思想来设计游戏
  3. 正泰电表采集 Modbus 数据接入 ThingsCloud 物联网云平台
  4. 祁文之恋——离开你的第五天
  5. NOIP2010提高组题解
  6. 区块链技术应用落地 区块链版权保护
  7. 请编写程序要求输入一个弧度值x,分别计算sin(x),tan(x)的值并输出。(用计算器程序验证你所得到的结果)
  8. 混凝土墙开洞_临沂市混凝土墙打孔开洞方案
  9. html5首行缩进没有效果,css如何实现首行缩进效果
  10. python实现logistics回归,以及从 疝 气 病 症 预 测 病 马 的 死 亡 率