IMPORTXML p/ o site do Ministério da Saúde

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 ?

2 Curtidas

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

1 Curtida

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.

1 Curtida

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

2 Curtidas

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.

2 Curtidas

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.

1 Curtida