如何用Python追蹤全球各地新冠肺炎資料?

京東科技開發者發表於2020-03-22

如何用Python追蹤全球各地新冠肺炎資料? 如何用Python追蹤全球各地新冠肺炎資料?

隨著大規模疫情的爆發,相關的各種資訊的傳播速度甚至超過了冠狀病毒(COVID-19)本身,這裡面我們很難去篩選哪些資訊是真的有益於我們的。但有一點很明確的是,我們必須瞭解影響我們居住地區的實際統計資料。

今天,我們將用一種有趣的方式——Python,來教大家如何獲得全球冠狀病毒相關數字的資訊。

我將向你展示如何在你的郵件中獲得每天有多少受冠狀病毒影響的人以及類似的資訊。

我將使用一種方法,叫做 Web抓取,使用到的工具是 SeleniumPython

如何用Python追蹤全球各地新冠肺炎資料?

來吧~直接進入正題

準備工作

首先,我們必須找到資料來源,也就是資料究竟從哪兒來?我決定用Worldometers來做這個,因為這裡面的資料相對比較準確,同時網站的頁面也做得非常直觀、簡潔。

如何用Python追蹤全球各地新冠肺炎資料?

這是一個表,顯示了受影響的每個國家的資料,在許多列中有不同的資料內容。

我們想做的是從表格中獲取你想要獲得的對應國家的資料,然後它會自動給你傳送電子郵件。


如何用Python追蹤全球各地新冠肺炎資料?

設定環境

首先,你需要安裝一個ChromeDriver( chromedriver.chromium.org ),它將使我們能夠操作瀏覽器,並向它傳送命令以供測試和使用。

開啟連結並下載作業系統的檔案,然後解壓縮該檔案。我建議進入檔案,透過右鍵點選手動操作,然後點選“解壓縮這裡”。

如何用Python追蹤全球各地新冠肺炎資料?

在這個資料夾裡,有一個叫做“chromedriver”的檔案,我們必須把它移到你電腦上的一個特定資料夾裡。

開啟終端,輸入以下命令:

1sudo su #enter the root mode
2cd      #go back to base from the current location
3mv /home/*your_pc_name*/Downloads/chromedriver /usr/local/bin 
4#move the file to the right location

接下來,只需要插入計算機的實際名稱,而不是* your_pc_name *。

完成之後,開啟編輯器。我個人的選擇是Visual Studio程式碼。它易於使用、可定製,並且可以減輕你裝置的負擔。

在任何你喜歡的地方開啟一個新專案並建立兩個新檔案。這是我的檔案開啟後的樣子:

如何用Python追蹤全球各地新冠肺炎資料?

在VS程式碼中,有一個“Terminal”選項卡,你可以使用它開啟VS程式碼中的內部終端,這對於將所有東西放在一個地方非常有用。

當你開啟它時,其實需要安裝的東西很少,這就是web驅動程式的虛擬環境和selenium。

將一下命令輸入終端:

1pip3 install virtualenv
2source venv/bin/activate
3pip3 install selenium

啟用虛擬環境之後,我們就完全準備好了。

如何用Python追蹤全球各地新冠肺炎資料?

編碼

既然我們已經確定了我們想要什麼(What),我們將從哪裡得到它(Where),我們就必須做“如何得到”(How)的部分。

建立你的工具,並啟動Chrome的驅動程式。

1class Coronavirus():
2  def __init__(self):
3    self.driver = webdriver.Chrome()

這就是我們需要開始開發的全部內容。現在去你的終端並輸入:

1python -i coronavirus.py

這個命令讓我們可以將檔案作為一個互動式遊樂場。瀏覽器的新標籤將被開啟,我們可以開始向它發出命令。

如果你想進行試驗,可以使用命令列,而不是直接將其輸入到原始檔中。(不是自用機器人。)

終端:

1bot = Coronavirus()
2bot.driver.get(')

原始碼:

1self.driver.get(')

當我們訪問網站時:
將該表作為Web元素,並將其儲存在 table下。為了在網頁上找到這個元素,我們使用 find_element_by_xpath()並使用它定義的id來過濾它。

1table = self.driver.find_element_by_xpath('//*[@id="main_table_countries"]/tbody[1]')

如何用Python追蹤全球各地新冠肺炎資料?

在這張表中,我們需要獲取國家,以確保它是我們最初想要查詢的國家。

1country_element = table.find_element_by_xpath("//td[contains(text(), 'China')]")

我們再次使用XPath,以“中國”為例。

因為我們需要‘China’旁邊的資料,所以我們必須確保它屬於那一行,這就是為什麼我們要從 country_element中獲取父元素。

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

在這一行中,我們得到了所有需要的資料我們將把這個字串分成每一列並儲存到變數中。

1data = row.text.split(" ")
2total_cases = data[1]
3new_cases = data[2]
4total_deaths = data[3]
5new_deaths = data[4]
6active_cases = data[5]
7total_recovered = data[6]
8serious_critical = data[7]

基本上‘data’是一個列表,它來自於字串的分割,然後我們把它分散到不同的變數中,以便以後使用。

傳送郵件

我們必須設定電子郵件傳送伺服器,進入谷歌賬戶服務,進入“應用程式的密碼”,在那裡你應該生成一個新的密碼,並在這個小指令碼中使用它。

我們也為我們將收到的電子郵件製作模板:

 1def send_mail(country_element, total_cases, new_cases, total_deaths, new_deaths, active_cases, total_recovered, serious_critical):
 2server = smtplib.SMTP('smtp.gmail.com', 587)
 3server.ehlo()
 4server.starttls()
 5server.ehlo()
 6server.login('email', 'password')
 7subject = 'Coronavirus stats in your country today!'
 8body = 'Today in ' + country_element + '\
 9\nThere is new data on coronavirus:\
10\nTotal cases: ' + total_cases +'\
11\nNew cases: ' + new_cases + '\
12\nTotal deaths: ' + total_deaths + '\
13\nNew deaths: ' + new_deaths + '\
14\nActive cases: ' + active_cases + '\
15\nTotal recovered: ' + total_recovered + '\
16\nSerious, critical cases: ' + serious_critical  + '\
17\nCheck the link: 
18msg = f"Subject: {subject}\n\n{body}"
19server.sendmail(
20'Coronavirus',
21'email',
22msg
23)
24print('Hey Email has been sent!')
25server.quit()

如果你想讓這個指令碼每天重複,看看這個連結: stackoverflow.com/quest

如何用Python追蹤全球各地新冠肺炎資料? 如何用Python追蹤全球各地新冠肺炎資料?

原文連結: towardsdatascience.com/

歡迎點選“ 京東智聯雲 ”瞭解更多精彩內容!

如何用Python追蹤全球各地新冠肺炎資料?

以上資訊來源於網路,由“京東智聯雲開發者”公眾號編輯整理,不代表京東智聯雲立場。

如何用Python追蹤全球各地新冠肺炎資料?


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69912185/viewspace-2681954/,如需轉載,請註明出處,否則將追究法律責任。

相關文章