<jupyter_start><jupyter_text>Webscraping e Python para ciência de dados.<jupyter_code># instalando pacote (kora)
# kora -> diversas aplicações para usar o python. Uma dessas é o selenium
!pip install kora -q

from bs4 import BeautifulSoup
import pandas as pd
from kora.selenium import wd
import numpy as np
#acessando usando o Selenium
url = 'https://worldometers.info/coronavirus/'
wd.get(url)

#Verificando o conteúdo da página
conteudo=wd.page_source

#Desde o início do conteúdo
conteudo[:500]

#Criando o BeautifulSoup
soup=BeautifulSoup(conteudo, 'html.parser')

#Criando a tabela
tabela=soup.find('table')

#Encontrar o elemento do cookie
elem_cookie=wd.find_elements_by_class_name('cc-compliance')
elem_cookie[0].click()


def processo(matriz):
  matriz.fillna(0, inplace = True)
  matriz=(matriz.replace('[\+\,]',"", regex = True))

  matriz['NewCases']=matriz['NewCases'].astype(int)
  matriz['NewDeaths']=matriz['NewDeaths'].astype(int)
  matriz['NewRecovered']=matriz['NewRecovered'].astype(int)
  matriz['TotalRecovered']=matriz['TotalRecovered'].astype(int)
  matriz['ActiveCases']=matriz['ActiveCases'].astype(int)

  #Referência para comparar valor total com o da página
  ref=matriz.iloc[:1,]
  ref

  #Cabeçalho
  nomes=(matriz.columns.values)

  #Só países
  paises=matriz.iloc[1:]
  
  for i in range(1,14):
    print(nomes[i])
 
    if paises[nomes[i]].sum(axis=0)==ref[nomes[i]].sum(axis=0):
      print('Correto!\n\n')
        
    else:
      print('Valor não compatível\n\n')

  print('##### Obs: Os valores "Tot Cases/1M pop", "Deaths/1M pop", "Total Tests", "Tests/1M pop" e \n"Population" não possuem valores totais na tabela original\n\n')
  exp=matriz.iloc[:1,:9]

  exp
  exp.to_excel('total.xlsx', sheet_name='Test', na_rep='#N/A', header=True, index=False)

#Obter os dados da Ásia
#Encontrar o elemento na página
elemento_atual = wd.find_elements_by_partial_link_text('Asia')
elemento_atual[0].click()

#Obtendo o conteúdo da página HTML após o clique
conteudo_novo=wd.page_source

#Fazendo o Parse dos dados do país
soup=BeautifulSoup(conteudo_novo, 'html.parser')
tabela_atual=soup.find(name='table')

df_atual=pd.read_html(str(tabela_atual), index_col=0)[0]

matriz=df_atual.head(50)
matriz
for i in range(1,2):
  print('Ásia\n')
  processo(matriz)

#Obter os dados da Europa
#Encontrar o elemento na página
elemento_atual = wd.find_elements_by_partial_link_text('Europe')
elemento_atual[0].click()

#Obtendo o conteúdo da página HTML após o clique
conteudo_novo=wd.page_source

#Fazendo o Parse dos dados do país
soup=BeautifulSoup(conteudo_novo, 'html.parser')
tabela_atual=soup.find(name='table')

df_atual=pd.read_html(str(tabela_atual), index_col=0)[0]

matriz=df_atual.head(49)
matriz

for i in range(1,2):
  print('Europa\n')
  processo(matriz)
#Obter os dados da América do Norte
#Encontrar o elemento na página
elemento_atual = wd.find_elements_by_partial_link_text('North America')
elemento_atual[0].click()

#Obtendo o conteúdo da página HTML após o clique
conteudo_novo=wd.page_source

#Fazendo o Parse dos dados do país
soup=BeautifulSoup(conteudo_novo, 'html.parser')
tabela_atual=soup.find(name='table')

df_atual=pd.read_html(str(tabela_atual), index_col=0)[0]

matriz=df_atual.head(40)
matriz

for i in range(1,2):
  print('América do Norte\n')
  processo(matriz)
#Obter os dados da América do Sul
#Encontrar o elemento na página
elemento_atual = wd.find_elements_by_partial_link_text('South America')
elemento_atual[0].click()

#Obtendo o conteúdo da página HTML após o clique
conteudo_novo=wd.page_source

#Fazendo o Parse dos dados do país
soup=BeautifulSoup(conteudo_novo, 'html.parser')
tabela_atual=soup.find(name='table')

df_atual=pd.read_html(str(tabela_atual), index_col=0)[0]

matriz=df_atual.head(15)
matriz

for i in range(1,2):
  print('América do Sul\n')
  processo(matriz)
#Obter os dados da África
#Encontrar o elemento na página
elemento_atual = wd.find_elements_by_partial_link_text('Africa')
elemento_atual[0].click()

#Obtendo o conteúdo da página HTML após o clique
conteudo_novo=wd.page_source

#Fazendo o Parse dos dados do país
soup=BeautifulSoup(conteudo_novo, 'html.parser')
tabela_atual=soup.find(name='table')

df_atual=pd.read_html(str(tabela_atual), index_col=0)[0]

matriz=df_atual.head(59)
matriz

for i in range(1,2):
  print('África\n')
  processo(matriz)<jupyter_output>África

TotalCases
Correto!


NewCases
Correto!


TotalDeaths
Correto!


NewDeaths
Correto!


TotalRecovered
Correto!


NewRecovered
Correto!


ActiveCases
Correto!


Serious,Critical
Correto!


Tot Cases/1M pop
Valor não compatível


Deaths/1M pop
Valor não compatível


TotalTests
Valor não compatível


Tests/ 1M pop
Valor não compatível


Population
Valor não compatível


##### Obs: Os valores "Tot Cases/1M pop", "Deaths/1M pop", "Total Tests", "Tests/1M pop" e 
"Population" não possuem valores totais na tabela original
{'fraction_non_alphanumeric': 0.11950071618579906, 'fraction_numerical': 0.012072846326989973, 'mean_word_length': 5.9728958630527815, 'pattern_counts': {'":': 0, '<': 4, '<?xml version=': 0, '>': 5, 'https://': 1, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '1', 'dir': 'jupyter-structured-clean-dedup', 'id': '107265', 'license': 'MIT', 'n_tokens_mistral': 2100, 'n_tokens_neox': 2022, 'n_words': 434, 'path': 'Webscraping_kora.ipynb', 'repo_name': 'Andre-Seiji/Python-data-Web-Scraping-example', 'size': '4887'}