丁香五月天婷婷久久婷婷色综合91|国产传媒自偷自拍|久久影院亚洲精品|国产欧美VA天堂国产美女自慰视屏|免费黄色av网站|婷婷丁香五月激情四射|日韩AV一区二区中文字幕在线观看|亚洲欧美日本性爱|日日噜噜噜夜夜噜噜噜|中文Av日韩一区二区

您正在使用IE低版瀏覽器,為了您的雷峰網(wǎng)賬號安全和更好的產(chǎn)品體驗,強(qiáng)烈建議使用更快更安全的瀏覽器
此為臨時鏈接,僅用于文章預(yù)覽,將在時失效
人工智能開發(fā)者 正文
發(fā)私信給楊鯉萍
發(fā)送

0

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

本文作者: 楊鯉萍 2020-03-26 17:38
導(dǎo)語:無廣告的自制訂閱神器。

雷鋒網(wǎng) AI 源創(chuàng)評論:目前,隨著新型冠狀病毒(COVID-19)在全球范圍內(nèi)蔓延,海外地區(qū)現(xiàn)有確診已經(jīng)上升至 293683(數(shù)據(jù)更新至 2020.03.25 16:54)。為了更好保證自身健康,我們必須了解正在影響?活所在地區(qū)的實際統(tǒng)計數(shù)據(jù)。

如何利用現(xiàn)有工具來實時追蹤病情分布?近日,一個有趣的開源項目正好解決了這一問題。只需一臺電腦,誰都可按照步驟利用 Python 獲得專屬個人的疫情信息。作者發(fā)布了文章介紹該操作過程,雷鋒網(wǎng) AI 源創(chuàng)評論將其編譯如下。

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

圖片來源:Sebastian Herrmann on Unsplash

Web 爬蟲計劃

我們將使? Web 爬蟲的?法,以及 Selenium(Web 爬蟲的一個庫)和 Python?具來完成這一計劃。
首先,我們需要找到從中獲取數(shù)據(jù)的網(wǎng)站,在本次教程中,使?到的是 Worldometers(https://www.worldometers.info/ ),因為作者覺得這上面的數(shù)據(jù)?常準(zhǔn)確,并且?站看起來不錯。

下面開始進(jìn)入計劃:

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

在 Worldometers 上的表格中,顯示了每個受影響國家/地區(qū)的相關(guān)數(shù)據(jù),包括:累計確診病例、新增病例、累計死亡人數(shù)、累計治愈人數(shù),以及病危程度的人數(shù)統(tǒng)計等。

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

我們要做的,就是將以上的各個詳細(xì)數(shù)據(jù),通過一系列方法的轉(zhuǎn)化,使其能夠自動發(fā)到我們的電子郵箱中。當(dāng)然,選擇其它包含這些數(shù)據(jù)的網(wǎng)站,也不是不可以。

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

搭建環(huán)境

首先,我們需要安裝 ChromeDriver,并進(jìn)行環(huán)境搭建。

ChromeDriver 將幫助我們能夠控制瀏覽器并向其發(fā)送命令,從而進(jìn)?測試和之后的其它操作,可以通過鏈接( https://chromedriver.chromium.org/ )下載與你電腦系統(tǒng)相匹配的安裝包。

Ps:如果你不是很熟悉 ChromeDriver,建議盡可能使用最新穩(wěn)定版本。

下載之后,接下來將需要解壓所下載的文件,建議右鍵單擊「文件」,然后選擇「Extract Here」,手動進(jìn)行解壓操作。

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

之后你會發(fā)現(xiàn)在該?件夾內(nèi),有?個名為「chromedriver」的?件,我們需要按照下面的步驟將其移?計算機(jī)上的特定?件夾。

  • 第一步,打開終端并輸?以下命令:

sudo su#進(jìn)?root 模式 cd 

#從當(dāng)前位置返回到基礎(chǔ) mv / home / *your_pc_name * / Downloads / chromedriver / usr / local / bin 

#將?件移動到正確的位置

注意:其中的「*your_pc_name *」部分,需要替換為所用計算機(jī)的實際名稱。

  • 第二步,打開編輯器,作者選擇的是 Visual Studio Code(https://code.visualstudio.com/ )。

  • 第三步,新建一個項?,并創(chuàng)建兩個新?件。可參考下面作者的設(shè)置:

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

Visual Studio Code—項目設(shè)置

并且可以發(fā)現(xiàn),在 VS Code 中有?個「Terminal」選項,可以?它在 VS Code 中打開內(nèi)部終端。

第四步,安裝虛擬環(huán)境和?于 Web 爬蟲驅(qū)動程序的 selenium 工具,并在終端中鍵?下面這些命令:

pip3 install virtualenv

source venv / bin / activate 

pip3 install selenium

最后激活虛擬環(huán)境,我們的準(zhǔn)備工作就完成了。

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

開始編碼

現(xiàn)在,我們完成對環(huán)境的搭建以及掌握所需信息獲取地址后,就要開始做「編碼實現(xiàn)」部分了。

我們將為其創(chuàng)建為?個類以及函數(shù),使?任何名稱創(chuàng)建即可,然后啟動 Chrome 驅(qū)動程序:

class Coronaviru(): 

           def __init __(self): 

                self.driver = webdriver.Chrome()

然后,轉(zhuǎn)到 VS Code 內(nèi)部終端并輸?下面的代碼,此命令使我們可以將?件作為交互式場所:

python -i coronavirus.py

之后,將瀏覽器的新標(biāo)簽頁打開,我們開始向其發(fā)出命令。(如果想進(jìn)?實驗,可以使?命令?代替在源?件中鍵?命令?)

對于終端,命令為:

bot = Coronavirus() 

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

 現(xiàn)在,使其獲取源代碼:

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

當(dāng)我們進(jìn)??站時,我們需要提取所選網(wǎng)頁中的表格。因此,我們將以這種?式進(jìn)?操作,將表格作為 Web 元素并將其保存在「表」下。

為了在?頁上找到該元素,我們使? find_element_by_xpath()并使?其定義的 ID 對其進(jìn)?過濾。

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

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

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

在該表中,通過對應(yīng)的名稱,確保要找到我們最初需要獲取國家或地區(qū)。

country_element = table.find_element_by_xpath(「// td 

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

再次使?XPath,我們嘗試使用「China」的數(shù)據(jù)。由于我們需要「China」旁邊的數(shù)據(jù),因此我們必須確保它屬于該?,這就是為什么要從 country_element 中獲取父節(jié)點:

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

在該?內(nèi),我們獲取了所需的所有數(shù)據(jù),我們將該字符串拆分為每?列,并將其保存為變量:

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」是?個來?字符串拆分的列表,然后我們將其分散到不同的變量中以備后?。

發(fā)送電?郵件

在完成編碼部分之后,我們就要進(jìn)入電子郵件發(fā)送部分了。

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

首先,需要設(shè)置電?郵件發(fā)送服務(wù)器。作者用到了 Google 帳戶服務(wù),然后進(jìn)?「應(yīng)?程序密碼」,在那??成?個新密碼并在所寫腳本程序中使?它。

然后,我們將通過以下代碼,為我們將收到的電?郵件制作模板:

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()

這樣,就能夠?qū)崿F(xiàn)單次的最新疫情信息獲取了。如果你希望每天重復(fù)執(zhí)?此腳本,可以通過下面鏈接中的編碼實現(xiàn):

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

成功訂閱!

最后,我們就得到了自制的郵件訂閱啦(如下所示)。

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

電子郵件形式成功

當(dāng)然,除了可以將我們所在地區(qū)的新冠病毒最新情況發(fā)到個人郵箱外,通過這樣的方法,舉一反三,你想訂閱的其它資訊也可以自定義發(fā)送,而且還沒有任何廣告。

而在此,也再次提醒所有朋友,在目前疫情持續(xù)情況下,一定要勤洗手、戴口罩;同時,盡可能避免與他?進(jìn)?過多的?體接觸。

原文地址:

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

完整開源代碼 Github 地址:

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

雷鋒網(wǎng) AI 源創(chuàng)評論

雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知

只需一臺電腦,用 Python 實時追蹤新冠病毒分布

分享:
相關(guān)文章
當(dāng)月熱門文章
最新文章
請?zhí)顚懮暾埲速Y料
姓名
電話
郵箱
微信號
作品鏈接
個人簡介
為了您的賬戶安全,請驗證郵箱
您的郵箱還未驗證,完成可獲20積分喲!
請驗證您的郵箱
立即驗證
完善賬號信息
您的賬號已經(jīng)綁定,現(xiàn)在您可以設(shè)置密碼以方便用郵箱登錄
立即設(shè)置 以后再說