Oi, gente
Como eu faço p/ aplicar o Import xml pra raspar os dados dessa página aqui http://plataforma.saude.gov.br/novocoronavirus/#COVID-19-brazil ?
Olá
Faz um tempo que não uso o =importxml (alguém pode ajudar? @mtrpires ) mas o indicado é abrir o site no Chrome, abrir o Inspecionar elemento e procurar a tag do conteúdo que te interessa
Nesse caso a tabela de notificações do vírus ao que parece começa em:
<div id="BRTableByData">
E se você clicar nessa linha com o botão direito do mouse e depois Copy – Copy XPath vai ter a referência XPath do local da tabela
//*[@id="BRTableByData"]
E no comando ficaria assim (retire as aspas duplas no meio do conteúdo e coloque aspas simples):
=importxml("http://plataforma.saude.gov.br/novocoronavirus/#COVID-19-brazil"; "//*[@id='BRTableByData']")
No Google Sheets abre uma planilha em branco e copie o comando, mas não funcionou aqui. Provavelmente porque é site dinâmico, como jQuery, AJAX, é como se o conteúdo estivesse fora do site, sempre que uma chamada é feita o conteúdo vem de outro local. Outros colegas já falaram disso aqui
Mas note que no topo direito da tabela há um ícone de CSV para baixar os dados. Talvez seja o suficiente para você
Em Python com selenium (biblioteca que controla o browser e por isso “vê” tudo que está no Network) você pode capturar assim:
from selenium import webdriver
import pandas as pd
# Local do seu driver
CHROME = r'C:\Program Files (x86)\Google\Chrome\Application\chrome.exe'
CHROMEDRIVER = r'D:\chromedriver'
# Definir opções do Chrome
chrome_options = webdriver.chrome.options.Options()
chrome_options.add_argument('--window-size=1920,1080')
chrome_options.binary_location = CHROME
# Esta opção deixa o navegador fora da tela, ao fundo
# chrome_options.add_argument('--headless')
# Seu site
link = 'http://plataforma.saude.gov.br/novocoronavirus/#COVID-19-brazil'
# Chama o driver e o link
browser = webdriver.Chrome(CHROMEDRIVER, options = chrome_options)
browser.get(link)
# Procura o local com id da tabela e usa comando do pandas para capturar o HTML da tabela
df = pd.read_html(browser.find_element_by_id('BRTableByData').get_attribute('outerHTML'))
# Neste caso temos que depois indicar que apenas o primeiro item do dataframe(0) deverá ser usado
df_casos = pd.DataFrame(df[0])
df_casos.head()
Unidade da Federação Suspeito Confirmado Descartado Total
Unidade da Federação Casos % Casos % Casos % Casos
0 Rondônia (RO) 2.0 6667 0 0 1.0 3333 3.0
1 Acre (AC) 3.0 10000 0 0 0.0 0 3.0
2 Amazonas (AM) 1.0 1250 0 0 7.0 8750 8.0
3 Pará (PA) 5.0 2778 0 0 13.0 7222 18.0
4 Norte 11.0 3438 0 0 21.0 6563 32.0
# Fecha o driver
browser.quit()
Mas claro ainda pode ser limpo para ser usado melhor
Oi, Reinaldo. Muito obrigada pela ajuda, deu uma luz p/ eu entender o porquê de não estar conseguindo aplicar a fórmula. Mas o ideal era que a tabela continuasse sendo atualizada conforme os dados fossem entrando no site do Ministério da Saúde. Também tive esse problema ao usar a fórmula e ela retornar como se a tabela não tivesse dados.
Oi @fernandacos , como o @reichaves comentou, o site carrega os dados de forma dinâmica e, por isso, a importação através da fórmula IMPORTHTML não funciona. Se abrir o código-fonte da página, você vê que não há nenhuma tabela no HTML originalmente e, assim, o Google Sheets nada acha também. Os dados só são carregados quando o navegador abre a página.
view-source:http://plataforma.saude.gov.br/novocoronavirus/#COVID-19-brazil
Olhando aqui através da opção “Inspecionar elemento” na aba “Network” dá para ver que parece que os dados são carregados deste arquivo:
http://plataforma.saude.gov.br/novocoronavirus/resources/scripts/database.js
Não há uma função nativa para importá-lo no Google Sheets, creio. Mas daria para tentar de repente algum plugin ou solução para importar JSON: https://medium.com/@paulgambill/how-to-import-json-data-into-google-spreadsheets-in-less-than-5-minutes-a3fede1a014a
Não precisa raspar Fernanda acima de todas as tabelas dá para baixar uma planilha csv. A melhor ferramenta é a que funciona, dá para analisar com planilhas mesmo.
Fiz um raspador aqui para pegar a série histórica dos dados deste site do Ministério da Saúde. Também fiz uma extração no domingo e deixei os dados na pasta no repositório também.
Uma planilha Google que raspa e armazena os dados em covid.saude.gov.br, por @mtrpires
Está neste link o tutorial
E aqui um link para baixar os dados de SRAG. No site do Ministério ainda não dá para exportar o CSV, então, criei este script para baixar do Infogripe.