import requests
from selenium import webdriver
from bs4 import BeautifulSoup
import pandas as pd
import bs4
from tkinter import *
def statno():
covidTk = Tk()
covidTk.title('Data statistics of COVID-19')
lb1 = Label(covidTk,text='Country: ')
lb1.grid(row=1,column=0,padx=10,pady=10)
lb2 = Label(covidTk,text=entcon.get())
lb2.grid(row=1,column=1,padx=10,pady=10)
res = requests.get("https://www.worldometers.info/coronavirus/#countries")
soup = BeautifulSoup(res.text, "html.parser")
table = soup.find("table", {"id":"main_table_countries_today"})
columns = [i.get_text(strip=True) for i in table.find("thead").find_all("th")]
rows = []
for row in table.find("tbody").find_all("tr"):
rows.append([i.get_text(strip=True) for i in row.find_all("td")])
df = pd.DataFrame(rows, columns=columns)
lb3 = Label(covidTk,text='Number of cases: ')
lb3.grid(row=2,column=0,padx=10,pady=10)
case_value = int(df.loc[lb2.cget('text')]['Total Cases'])
lb4 = Label(covidTk,text=case_value)
lb4.grid(row=2,column=1,padx=10,pady=10)
win = Tk()
win.title('COVID-19 tracker')
web = requests.get('https://www.worldometers.info/coronavirus')
objSoup = bs4.BeautifulSoup(web.text,'lxml')
lbtitle = Label(win,text='Covid-19 Statistics')
lbtitle.grid(row=0,columnspan=2)
lbcon = Label(win,text='Country: ')
lbcon.grid(row=1,column=0,padx=10,pady=20)
conname = StringVar()
entcon = Entry(win,textvariable=conname)
entcon.grid(row=1,column=1,padx=10,pady=20)
btncheck = Button(win,text='Check data',command=statno)
btncheck.grid(row=2,column=1,padx=10,pady=10)
lbcase = Label(win,text='Coronavirus Cases: ')
lbcase.grid(row=3,column=0)
total = objSoup.find_all('div',{'class':'maincounter-number'})
total_cases = total[0]
lbdat1 = Label(win,text=total_cases.text)
lbdat1.grid(row=3,column=1)
lbdeaths = Label(win,text='Deaths: ')
lbdeaths.grid(row=4,column=0)
total_deaths = total[1]
lbdat2 = Label(win,text=total_deaths.text)
lbdat2.grid(row=4,column=1)
lbcase = Label(win,text='Recovered: ')
lbcase.grid(row=5,column=0)
total_recover = total[2]
lbdat3 = Label(win,text=total_recover.text)
lbdat3.grid(row=5,column=1)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Python38\lib\tkinter\__init__.py", line 1883, in __call__
return self.func(*args)
File "E:\Python\Python Projects Fun\covid_gui.py", line 36, in statno
case_value = int(df.loc[lb2.cget('text')]['Total Cases'])
File "C:\Python38\lib\site-packages\pandas\core\indexing.py", line 1768, in __getitem__
return self._getitem_axis(maybe_callable, axis=axis)
File "C:\Python38\lib\site-packages\pandas\core\indexing.py", line 1965, in _getitem_axis
return self._get_label(key, axis=axis)
File "C:\Python38\lib\site-packages\pandas\core\indexing.py", line 625, in _get_label
return self.obj._xs(label, axis=axis)
File "C:\Python38\lib\site-packages\pandas\core\generic.py", line 3537, in xs
loc = self.index.get_loc(key)
File "C:\Python38\lib\site-packages\pandas\core\indexes\range.py", line 353, in get_loc
return super().get_loc(key, method=method, tolerance=tolerance)
File "C:\Python38\lib\site-packages\pandas\core\indexes\base.py", line 2648, in get_loc
return self._engine.get_loc(self._maybe_cast_indexer(key))
File "pandas\_libs\index.pyx", line 111, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index.pyx", line 135, in pandas._libs.index.IndexEngine.get_loc
File "pandas\_libs\index_class_helper.pxi", line 109, in pandas._libs.index.Int64Engine._check_type
KeyError: 'Brazil'
Извините, у меня проблема, когда я использую int(df.loc[lb2.cget('text')]['Total Cases'])
, отображается указанная выше ошибка. Могу я спросить, что мне следует изменить, если я хочу найти данные, соответствующие стране, в той же строке, что и метка tkinter? Я тщательно просмотрел книги, но все еще не смог найти возможное решение для устранения указанной выше ошибки. Так кто-нибудь может научить меня, как с этим бороться? Я не знаю, почему ошибка ключа, потому что я проверил и орфографию нет. Эту проблему я уже исправил, просмотрев документацию и узнав больше о методах. В следующий раз, если я столкнусь с той же проблемой, я смогу сделать это сам и подумать больше, чем я думаю, что смогу справиться с ней сам. Прежде чем задавать новые вопросы, я сначала проведу дополнительные исследования и буду спрашивать только при необходимости.