Lei Feng Net AI Kaynağı Chuang Yorumlar: Şu anda, yeni koronavirüs (COVID-19) küresel olarak yayılırken, denizaşırı bölgelerde teyit edilen vaka sayısı 293683'e yükseldi (veriler 2020.03.2516:54 olarak güncellendi). Kendi sağlığımızı daha iyi korumak için hayatımızı etkileyen gerçek istatistikleri anlamalıyız.
Hastalık dağılımını gerçek zamanlı olarak izlemek için mevcut araçlar nasıl kullanılır? Son zamanlarda, ilginç bir açık kaynak projesi bu sorunu çözdü. Sadece bir bilgisayarla, herkes adımları takip edebilir ve salgın hakkında kişisel bilgi almak için Python'u kullanabilir. Yazar, operasyon sürecini açıklayan bir makale yayınladı ve Leifeng.com'un AI Source Chuang yorumu bunu aşağıdaki gibi derledi.
Resim kaynağı: Sebastian Herrmann, Unsplash'ta
Bu projeyi tamamlamak için Web gezgini yönteminin yanı sıra Selenium (Web tarayıcıları için bir kitaplık) ve Python araçlarını kullanacağız.
Öncelikle verilerin elde edildiği web sitesini bulmamız gerekiyor.Bu eğitimde Worldometers (https://www.worldometers.info/) kullanılmıştır çünkü yazar yukarıdaki verilerin çok doğru olduğunu düşünmektedir ve web sitesi harika görünüyor.
Aşağıdaki plana girmeye başlayın:
Worldometers tablosunda, etkilenen her ülke / bölgenin ilgili verileri gösterilmektedir, bunlar arasında şunlar yer alır: kümülatif doğrulanmış vakalar, yeni vakalar, kümülatif ölümler, kümülatif tedaviler ve kritik hastalık istatistikleri.
Yapmamız gereken, yukarıdaki ayrıntılı verileri bir dizi yöntemle dönüştürmektir, böylece otomatik olarak e-posta adresimize gönderilebilir. Elbette bu verileri içeren başka web sitelerini seçmek imkansız değil.
Öncelikle, ChromeDriver'ı yüklememiz ve ortamı oluşturmamız gerekiyor.
ChromeDriver, tarayıcıyı kontrol etmemize ve test ve diğer işlemler için ona komutlar göndermemize yardımcı olacaktır. Bilgisayar sisteminizle eşleşen kurulum paketini bağlantıdan indirebilirsiniz (https://chromedriver.chromium.org/).
Not: ChromeDriver'a pek aşina değilseniz, mümkün olduğunca en son kararlı sürümü kullanmanız önerilir.
İndirdikten sonra, indirilen dosyayı açmanız gerekecektir. Dosyayı manuel olarak çıkarmak için "Dosya" yı sağ tıklayıp "Buradan Çıkart" ı seçmeniz önerilir.
Daha sonra bu klasörde "chromedriver" adında bir dosya olduğunu göreceksiniz. Bilgisayardaki belirli bir klasöre taşımak için aşağıdaki adımları izlememiz gerekiyor.
İlk adım, bir terminal açmak ve aşağıdaki komutu girmektir:
sudo su # kök moduna cd girin
# Mevcut konumdan üsse geri dön mv / home / * your_pc_name * / Downloads / chromedriver / usr / local / bin
# Dosyayı doğru konuma taşıyın
Not: "* your_pc_name *" bölümü, kullanılan bilgisayarın gerçek adıyla değiştirilmelidir.
İkinci adım, editörü açmaktır.Yazar, Visual Studio Code'u (https://code.visualstudio.com/) seçmiştir.
Üçüncü adım, yeni bir proje oluşturmak ve iki yeni dosya oluşturmaktır. Yazarın aşağıdaki ayarlarına başvurabilirsiniz:
Visual Studio Code - Proje Ayarları
Ve VS Kodunda bir "Terminal" seçeneği olduğunu bulabilir, bunu VS Kodunda dahili terminali açmak için kullanabilirsiniz.
Dördüncü adım, Web tarayıcı sürücüsü için sanal ortamı ve selenyum aracını kurmak ve terminale aşağıdaki komutları yazmaktır:
pip3 virtualenv kur
kaynak venv / bin / activ
pip3 selenyum yükle
Son olarak sanal ortamı etkinleştirin ve hazırlıklarımız tamamlandı.
Şimdi, ortamı kurmayı ve adresi elde etmek için gerekli bilgileri öğrenmeyi bitirdikten sonra, "kodlama gerçekleştirme" kısmına başlamak üzereyiz.
Bunu bir sınıf ve işlev olarak oluşturacağız, herhangi bir adla oluşturacağız ve ardından Chrome sürücüsünü başlatacağız:
sınıf Coronaviru:
def __init __ (öz):
self.driver = webdriver.Chrome
Ardından, VS Code dahili terminaline gidin ve aşağıdaki kodu girin. Bu komut, dosyayı etkileşimli bir yer olarak kullanmamızı sağlar:
python -i coronavirus.py
Bundan sonra tarayıcının yeni bir sekmesi açıldı ve ona komutlar vermeye başladık. (Denemek istiyorsanız, kaynak dosyaya komut satırını yazmak yerine komut satırını kullanabilirsiniz)
Terminal için komut şu şekildedir:
bot = Koronavirüs
bot.driver.get ('https://www.worldometers.info/coronavirus/')
Şimdi, kaynak kodunu almasını sağlayın:
self.driver.get ('https://www.worldometers.info/coronavirus/')
Web sitesine girdiğimizde seçilen web sayfasından tabloyu çıkarmamız gerekiyor. Dolayısıyla tabloyu bir web elemanı olarak kullanarak ve "tablo" altına kaydederek bu şekilde çalışacağız.
Öğeyi web sitesinde bulmak için find_element_by_xpath kullanırız ve onu filtrelemek için tanımlı kimliğini kullanırız.
table = self.driver.find_element_by_xpath ('// *
/ tbody ')
Bu tabloda, ilgili ad aracılığıyla, başlangıçta edinmemiz gereken ülke veya bölgeyi bulduğunuzdan emin olun.
country_element = table.find_element_by_xpath ("// td
"))
XPath'i tekrar kullanarak "Çin" verilerini kullanmaya çalışıyoruz. "Çin" in yanındaki verilere ihtiyacımız olduğu için, bu satıra ait olduğundan emin olmalıyız, bu nedenle country_element'ten üst düğümü almalıyız:
row = country_element.find_element_by_xpath ("./ ..")
Bu satırda ihtiyacımız olan tüm verileri elde ettik, dizeyi her bir sütuna böldük ve bir değişken olarak kaydettik:
data = row.text.split ("")
total_cases = veri
new_cases = veri
total_deaths = veri
new_deaths = veri
active_cases = veri
total_recovered = veri
ciddi_ kritik = veri
Bunlar arasında "veri", bölünmüş dizeden bir listedir ve daha sonra kullanmak üzere onu farklı değişkenlere yayarız.
Kodlama bölümünü tamamladıktan sonra e-posta gönderme bölümüne girmek üzereyiz.
Öncelikle, bir e-posta gönderme sunucusu kurmanız gerekir. Yazar, Google hesap hizmetini kullanır ve ardından "uygulama şifresini" girer, burada yeni bir şifre oluşturur ve onu yazılan komut dosyasında kullanır.
Ardından, alacağımız e-postalar için bir şablon oluşturmak için aşağıdaki kodu kullanacağız:
def send_mail (country_element, total_cases, new_cases, total_deaths, new_deaths, active_cases, total_recovered, ciddi_ kritik):
sunucu = smtplib.SMTP ('smtp.gmail.com', 587)
server.ehlo
server.starttls
server.ehlo
server.login ('e-posta', 'şifre')
subject = 'Ülkenizdeki koronavirüs istatistikleri bugün!'
body = 'Bugün' + country_element + '\
\ nToplam durumlar: '+ total_cases +' \
\ nYeni vakalar: '+ yeni_cases +' \
\ nToplam ölümler: '+ toplam ölümler +' \
\ nYeni ölümler: '+ yeni ölümler +' \
\ nAktif vakalar: '+ active_cases +' \
\ nToplam kurtarılan: '+ total_recovered +' \
\ nCiddi, kritik durumlar: '+ ciddi_ kritik +' \
\ nBağlantıyı kontrol edin: https://www.worldometers.info/coronavirus/ '
msg = f "Konu: {konu} \ n \ n {gövde}"
server.sendmail (
'Koronavirüs',
"e-posta",
msg
)
print ('Hey E-posta gönderildi!')
server.quit
Bu şekilde, en son salgın bilgisinin tek bir edinimi sağlanabilir. Bu betiği her gün tekrar tekrar çalıştırmak istiyorsanız, aşağıdaki bağlantıyı kodlayarak bunu yapabilirsiniz:
https://stackoverflow.com/questions/15088037/python-script-to-do-something-at-the-same-time-every-day
Son olarak, kendi kendine yapılan bir e-posta aboneliğimiz var (aşağıya bakın).
E-posta formu başarılı
Elbette bölgemizdeki yeni taç virüsünün son durumunu kişisel posta kutunuza göndermenin yanı sıra bu yöntemle analoji yoluyla abone olmak istediğiniz diğer bilgiler de özelleştirilebilir ve reklamsız gönderilebilir.
Burada tüm arkadaşlara salgının şu anki durumu altında ellerini sık sık yıkamaları ve maske takmaları gerektiğini, aynı zamanda kendileriyle aşırı fiziksel temastan kaçınmaları gerektiğini bir kez daha hatırlatmak isterim.
Orijinal adres:
https://towardsdatascience.com/how-to-track-coronavirus-with-python-a5320b778c8e
Tam açık kaynak kodu Github adresi:
https://github.com/lazargugleta/coronavirusStats/blob/master/coronavirus.py
Leifeng.com AI Kaynak Oluşturma İncelemesi