Web Scraping em páginas dinâmicas com Python e Selenium
Texto escrito por: César Augusto, Davi Félix, Renata Leite e Rodrigo Marcolin.
Olá, caro leitor! Seja bem-vindo a mais um Turing Talks!
No texto de hoje, abordaremos, novamente, o tópico Web Scraping. No entanto, dessa vez o nosso foco recairá sobre páginas dinâmicas e a utilização da biblioteca Selenium, complementando o texto publicado no dia 14/08, que apresentava páginas estáticas e a biblioteca Beautiful Soup.
Para alcançar o objetivo proposto, este Turing Talks será estruturado da seguinte forma:
- Introdução: o que é e onde usar Web Scraping?
- Questões éticas e legais
- Ferramentas necessárias
- Parte prática: projeto de raspagem de dados
- Análise dos dados obtidos
Aqueles que já leram o nosso último Turing Talks sobre Web Scraping, sintam-se livres para pular a introdução e ir direto ao que interessa! Mas, caso você queira refrescar a memória ou ainda seja novo ao assunto, fique tranquilo: começaremos do começo. Vamos lá?
Introdução
A ideia por trás do tópico de hoje é simples: o Web Scraping consiste na “raspagem” de dados de uma página da web através da construção de um agente capaz de coletar, organizar e armazenar informações úteis, tudo de forma automatizada. Apesar de uma pessoa ser capaz de copiar manualmente dados interessantes de um site e colá-los numa planilha ou num documento qualquer para guardá-los, como talvez você mesmo, caro leitor, já tenha feito enquanto planejava uma viagem e comparava os preços e acomodações de diferentes hotéis, é óbvio que, quando precisamos realizar uma “raspagem” de sites em larga escala ou de forma rápida, é muito mais eficiente utilizar um web scraper, capaz de automatizar e simplificar esse processo que poderia ser bastante demorado.
Assim, basicamente, o Web Scraping serve para coletar um grande volume de informações num curto período de tempo, cometendo menos erros e sendo mais eficiente do que um humano poderia ser. Portanto, podemos observar que essa é uma ferramenta bem poderosa, sendo, por isso, usada por empresas de mídia para verificar quais assuntos estão em alta no momento, por sites de busca que comparam automaticamente o preço de remédios ou outros produtos, por empresas de marketing, de comércio eletrônico, de agências de viagem… Enfim, os usos são muito variados. Mesmo os serviços Google têm o seu próprio indexador, o Googlebot, que visita as páginas de internet existentes, reunindo e indexando as informações ao banco de dados do buscador. É assim que o Google vai saber quais páginas mostrar ao usuário de acordo com o que foi escrito na barrinha de pesquisa! Interessante, não?
Agora que já definimos o Web Scraping e mostramos também alguns de seus possíveis usos, podemos introduzir o segundo termo-chave presente no título deste texto, que é a ideia de páginas dinâmicas. Como dissemos anteriormente, já publicamos um texto sobre Web Scraping de páginas estáticas. Mas, afinal, qual a diferença entre esses dois tipos?
Páginas dinâmicas e páginas estáticas
Tal classificação diz respeito ao modo de disponibilidade do conteúdo do site. Funciona assim: quando você acessa um site, basicamente o servidor recebe sua requisição e envia o conteúdo. Nas páginas estáticas, o conteúdo já vem pronto do próprio servidor, não havendo novas requisições a partir das interações do usuário dentro de uma mesma página. Enquanto isso, em páginas dinâmicas, o conteúdo muda a partir de novas requisições ao servidor quando o usuário interage com a página de alguma maneira (por exemplo, um botão apertado pode fazer com que novos dados sejam “buscados” no servidor e apareçam na tela). Isso porque o arquivo não está simplesmente pronto em HTML, precisando de todo um trabalho de acessar o banco de dados para montá-lo.
No Web Scraping, essa diferença tem consequências importantes: se as páginas estáticas podem ser raspadas de maneira simples (acessamos, baixamos seu HTML e usamos ferramentas como BeautifulSoup para coletar os dados), as dinâmicas exigem um arsenal diferente de ferramentas, já que só o BeautifulSoup, por exemplo, não permite simular essa interação humano-computador com a página web. Portanto, faz-se necessária uma ferramenta que permita automatizar essa interação com os navegadores.
Questões éticas e legais
Muito falamos das diversas vantagens do Web Scraping, mas devemos reconhecer também os seus pontos negativos — e, até mesmo, os seus perigos. Infelizmente, esse tipo de coleta de dados não interessa apenas àqueles que querem estudar e pesquisar sobre um determinado assunto ou à companhias que pretendem utilizar os dados coletados de uma forma ética e honesta, mas também a empresas que não veem limites para o aumento dos lucros, mesmo que isso signifique a ultrapassagem de certas barreiras que deveriam garantir a privacidade e a segurança de usuários de internet.
Hoje em dia, é fato que, para praticamente qualquer organização, ter acesso a um grande volume de dados significa ter vantagens, seja conseguindo um lucro maior, uma melhor estratégia de negócio ou uma maior eficiência. Com isso em mente, já é esperado, portanto, que o Web Scraping seja uma prática bastante comum dentro dos mais diversos projetos; entretanto, é essencial refletir sobre todas as questões éticas envolvidas, por exemplo, quando uma empresa coleta dados de sua concorrente para decidir quais produtos colocará em promoção, obtendo maiores ganhos financeiros que sua adversária — questão que pode ser, inclusive, ainda mais grave quando há o desrespeito dos códigos de conduta de proteção de dados, elaborados para proteger, por exemplo, informações pessoais ou sensíveis desse tipo de atitude.
É importante lembrarmos que, quando fazemos Web Scraping, estamos programando um robô para extrair da internet informações que julgamos pertinentes. Então, antes de acessar e tomar algum dado, pode ser interessante (e ético) confirmar quais são os dados que o proprietário do site pede para que não acessemos. Mas, caso você esteja se perguntando como fazer essa verificação, não tema! Existe uma ferramenta bastante útil para isso:
Robots.txt
Podendo ser acessado pela simples inclusão de“/robots.txt” ao fim do URL desejado (exemplo: “www.youtube.com/robots.txt”), esse arquivo tem por finalidade excluir dos buscadores páginas que não deveriam ser expostas para o público geral ao se pesquisar por aquele site, tais como arquivos essenciais para o bom funcionamento do site ou imagens e gráficos autorais. Mais do que isso, porém, essa ferramenta também contribui para regular o fluxo de visitas, buscando impedir um acesso frequente de robôs a partes internas importantes para o funcionamento do site, o que poderia acarretar uma sobrecarga do servidor e derrubar a página.
Embora o arquivo robots.txt não seja taxativo — ou seja, o seu conteúdo não é uma ordem, mas apenas uma recomendação — , é aconselhável não acessar os arquivos que o proprietário não deseja que sejam acessados. Por essa razão, pode ser frustrante tentar fazer Web Scraping de uma dessas páginas “proibidas”, pois, provavelmente, o bot do programa que você está usando irá se negar a continuar com o acesso, em respeito às restrições impostas naquele domínio.
Ferramentas necessárias para Web Scraping
Já explicamos o que é o robots.txt, mas, para realizar um Web Scraping de sucesso, precisamos ainda de muitas outras ferramentas. Buscaremos explicá-las neste tópico. Primeiramente, tratando-se de uma página dinâmica, é necessário escolher um caminho: podemos buscar o conteúdo do site diretamente em sua programação em JavaScript, o que só é possível sabendo como o site organiza as informações que estão contidas nele, ou podemos programar um bot para fazer isso por nós. Vamos começar pela primeira opção:
Buscando informações na página com o AJAX
Se você optar por buscar o conteúdo no JavaScript, então o AJAX será a ferramenta que tornará isso possível. AJAX é um acrônimo para Asynchronous JavaScript And XML. Basicamente, o AJAX não é uma linguagem de programação, mas sim uma técnica que torna possível uma atualização dessincronizada entre o navegador do usuário, que tenta acessar a página na web, e o servidor em que esta página está hospedada. Assim, conforme o usuário navega no site, novas informações são inseridas na página que está sendo mostrada em seu dispositivo, que poderá ser constantemente atualizada sem que o usuário precise recarregá-la.
Um exemplo bastante elucidativo de uso do AJAX são as mídias sociais com o scroll infinito, em que é possível rolar a tela infinitamente por conta da alimentação incessante de conteúdo. O que seria o final da página, portanto, jamais é atingido.
Utilizando o AJAX, faz-se uma engenharia reversa do JavaScript. Buscamos pela resposta enviada pelo servidor para a requisição feita a partir do dispositivo do usuário. Geralmente, essa resposta está contida em um arquivo JSON. Esse arquivo, então, é lido com o uso de Python e transcrito em um arquivo de texto, a partir do qual, enfim, será possível obter os dados. Pelo método aqui descrito, a “raspagem” da página torna-se bem mais complicada, demandando, por isso, um maior nível de dedicação e conhecimento para ser realizada.
Programando um bot scraper em Python
Agora, se você optar por utilizar um bot para fazer a coleta de dados das páginas, sorria, pois há várias opções que podem te auxiliar nesse processo! Antes de tudo, porém, precisamos esclarecer que as ferramentas selecionadas serão utilizadas em Python. Você, então, poderá se questionar: mas, por que Python?
Para fazer Web Scraping, existem várias opções de linguagem de programação disponíveis. Entretanto, a depender da escolha que o programador faça, a tarefa de obter os dados da internet pode acabar se tornando ainda mais complicada do que já é. Dessa forma, levando em conta a presença de diversas bibliotecas em Python que permitem a automatização da raspagem dos dados, mediante a criação de bots que imitam o comportamento do usuário, por exemplo, optamos por fazer a raspagem de páginas da web a partir dessa linguagem. Além disso, o Python é bastante versátil, contando com ferramentas como a biblioteca Pandas para a análise e, principalmente, para a organização dos dados obtidos da internet. Dessa maneira, além de facilitar e agilizar a criação e execução de um bot scraper, optar pelo uso do Python possibilita ainda a unificação de todo o trabalho em uma única plataforma.
Observe algumas das ferramentas para fazer Web Scraping de forma automatizada utilizando o Python:
- Pyppeteer: trata-se de um porte do Puppeteer para Python. Desenvolvido originalmente pelo Google, o Puppeteer tem como objetivo automatizar algumas ações realizadas através do navegador; já o Pyppeteer, assim como em sua versão original, funciona como um navegador automatizado baseado em Chromium e que atua em modo headless — ou seja, o usuário não vê a interface do programa. Assim, através de comandos direcionados para essa biblioteca, é possível realizar tarefas cotidianas do navegador, como imprimir arquivos, escrever, testar extensões, e, o principal quando se trata de Web Scraping: receber o conteúdo de uma página da web e interpretá-lo. Enquanto sua versão oficial se baseia em Node.js, ambiente de desenvolvimento para servidores que permite uma conexão em tempo real entre servidor e cliente, o Pyppeteer faz uso do Python para suprir a tarefa de receber o código do servidor e decodificá-lo. Embora útil e funcional, o Pyppeteer não é uma versão licenciada do seu programa-base. Na verdade, trata-se de uma versão criada pela comunidade.
- Playwright: Assim como o anterior, o Playwright também age como um navegador automatizado; no entanto, esta ferramenta não está limitada ao Chromium e pode, com o auxílio do WebKit, simular outros navegadores como o Firefox e o Safari. Então, pelo uso do Playwright, é possível automatizar a realização de todas as tarefas usualmente feitas no navegador — o que inclui, obviamente, o recebimento e a tradução dos dados recebidos, fundamental para a realização de Web Scraping. Com o Playwright, é possível utilizar várias guias e diversas operações simultaneamente. Há ainda a opção de utilizar o programa em modo headless, no qual, como já dissemos, o usuário não vê a interface do site que está rodando, ou em modo headed, com a visualização das páginas no navegador. Um outro grande diferencial do Playwright é a sua grande versatilidade. Há versões desta biblioteca para Python, C#, JavaScript, entre outas linguagens de programação.
O Selenium
Finalmente, chegamos ao que é, sem dúvida, um dos artifícios mais famosos em seu ramo: o Selenium. Com esta ferramenta opensource, podemos não apenas automatizar as tarefas realizáveis em um navegador, como também realizar todas as demais funções exercidas pelos programas anteriores, isto é: se conectar a uma página na web, receber os seus dados, traduzi-los, interagir com a página, etc. Entretanto, o Selenium faz uso de uma tecnologia um pouco diferente para isso. Com a API WebDriver, conectada ao servidor do Selenium, é possível reproduzir todas as ações praticadas por um usuário humano, com a vantagem de poder reproduzi-las em múltiplos navegadores ao mesmo tempo!
Para realizar essas tarefas, o WebDriver faz uso das ferramentas dos navegadores que já estão disponíveis no dispositivo do usuário. Então, basicamente, a API intermedeia a comunicação do dispositivo com o servidor, tomando, ainda que momentaneamente, o papel do navegador. O script escrito pelo usuário gera uma requisição que, convertida para o formato JSON, chega ao Selenium, sendo, então, repassada ao servidor como se fosse uma requisição gerada pelo próprio usuário durante a navegação. Essa requisição é recebida e tratada no servidor, retornando como ações a serem realizadas no navegador. Quando essas ações são realizadas, o navegador avisa o servidor, que retorna, ao Selenium, um arquivo com o resultado daquela execução. Essa troca de arquivos é que caracteriza a navegação na web.
Todos esses passos, é necessário ressaltar, ocorrem em back-end. Contudo, o usuário pode visualizar a interação do bot com as páginas vistas como se estivesse observando alguém navegando em seu computador. Por utilizar o próprio navegador, o WebDriver torna o processo de interação com as páginas muito mais rápido e natural, de forma bastante similar ao que o próprio usuário faria, visto que a API consegue simular comportamentos típicos como duplos cliques, preenchimento de campos, ações de arrastar e soltar, cliques comuns e vários outros procedimentos. É por estas razões que optamos por utilizar o Selenium.
Instalação do Selenium
Para aqueles que estão ávidos por utilizar esta poderosa ferramenta, incluímos também um pequeno tutorial de instalação. Por sorte, o Selenium pode ser acessado como qualquer outra biblioteca do Python, a partir do gerenciador de pacotes pip. Basta digitar o comando pip install selenium
.
No entanto, como já explicado, ainda precisamos de um webdriver para fazê-lo funcionar, e sua instalação pode ser feita de duas principais formas diferentes. A maneira mais recorrente para a obtenção de um webdriver seria a instalação da versão específica para o seu computador de modo que ele esteja disponível em linha de comando (no PATH do sistema). Por ser uma instalação mais complexa, usaremos uma forma alternativa a partir da biblioteca webdriver-manager, que também é instalada a partir do gerenciador de pacotes do Python, o pip. Para isso, utilize o comando pip install webdriver-manager
.
O uso dessa biblioteca permite mais versatilidade no versionamento dos webdrivers e a instalação pode ser feita dentro do código, sem a necessidade de alterar o PATH do seu sistema. No nosso exemplo prático, usaremos o chromedriver, correspondente ao navegador Google Chrome. No entanto, existem drivers para outros navegadores, como o geckodriver para o caso do Firefox.
Usando o webdriver-manager, a instalação é feita a partir das seguintes linhas de código, como fizemos em nosso projeto:
Parte prática
E chegamos a tão aguardada demonstração prática!
Para aplicar os conhecimentos sobre Web Scraping, fizemos um projeto relacionado a previsão do tempo, tendo como base o site Climatempo. Vamos, agora, explicar os objetivos de tal proposta e sua implementação. Caso queira ver o projeto em detalhes, é possível acessar o repositório com o nosso código.
Apresentação do projeto
Tomamos como objetivo a extração de previsões de temperatura para diferentes locais a fim de que pudéssemos comparar essas previsões com a temperatura real do dia.
Para isso, utilizamos, por alguns dias, Web Scraping para retirar do site do Climatempo a previsão hora a hora para o dia atual — que consideramos como a temperatura correta— e para os próximos dois dias. Tais informações foram armazenadas em um banco de dados relacional SQLite.
Com os dados em mãos, fizemos uma análise para determinar os acertos e inconsistências nas previsões de temperaturas.
Nos próximos tópicos, iremos detalhar as principais etapas do projeto.
Banco de dados
No mundo da ciência e da engenharia de dados, o Web Scraping é uma das ferramentas que nos permitem extrair informações úteis de websites. Entretanto, por si só, sua utilidade acaba sendo limitada.
Imagine que tenhamos um algoritmo de Web Scraping que acessa um site e extrai informações para uma determinada finalidade (ex. montar visualizações, treinar um modelo, etc). Se não armazenarmos esses dados em algum local, teremos que rodar o algoritmo para coletá-los toda vez que necessitarmos deles. Além disso, imagine que o conteúdo de um site é atualizado a cada dia. Caso não armazenemos os dados, teremos acessos somente àqueles extraídos no dia da execução do algoritmo, o que limitaria nossas análises.
Portanto, o verdadeiro poder do Web Scraping é desbloqueado com sua utilização junto a um banco de dados. Nesse cenário, o robozinho do scraping é responsável, também, por trazer os dados e armazená-los no banco, onde eles ficarão disponíveis para consulta e manipulação sempre que quisermos.
Há alguns tipos de banco de dados, como os relacionais (SQL) e não relacionais (NoSQL), ambos com infinitas utilidades. Mas esse é um tema para um outro TuringTalks! Neste, focaremos na utilização de um banco no contexto da nossa aplicação de Web Scraping.
A ideia é que, durante um determinado período de tempo, extraíamos diariamente as temperaturas daquela data e as previsões para os dois próximos dias, armazenando essas informações no banco para que, posteriormente, pudéssemos comparar as temperaturas previstas com as medidas consideradas corretas. O banco de dados utilizado foi o SQLite, que é relacional e, apesar de ser bem simples e não escalável, é extremamente útil para uma grande variedade de aplicações. O Python nativamente possui uma biblioteca para interação com bancos SQLite desde sua versão 2.5.
Para podermos tirar proveito disso, é necessário entender que, em um banco relacional, as informações são armazenadas em estruturas parecidas com tabelas, onde cada coluna representa um atributo e cada linha, um objeto. Tome, por exemplo, a seguinte imagem:
Ela representa a seguinte tabela:
Ademais, as tabelas podem relacionar-se umas com as outras. Por exemplo, observe a imagem abaixo, que representa as tabelas que criamos para esse projeto, bem como o relacionamento entre elas:
As tabelas todas possuem um atributo chamado “id”, que é um identificador único de cada entrada. Não pode haver duas linhas com o mesmo id. Além disso, cada acesso (tabela central) é definido pela data em que ocorre (atributo data_acesso), pela data da qual prevê as temperaturas (atributo data_previsao), e pelo local das previsões (atributo id_local).
Um local é, por si só, uma tabela (à direita), e cada local possui um nome e uma url. Assim, as tabelas “acesso” e “local” possuem um relacionamento entre si, pois cada acesso tem somente 1 local, mas cada local pode pertencer a vários acessos. A tabela acesso faz referência a qual local ela possui através do id do local em questão.
Analogamente, cada previsão (tabela à esquerda) pertence a um e somente um acesso, mas cada acesso pode possuir mais de uma previsão, que é definida pelo horário em que ocorre e a temperatura que prevê.
A explicação da razão pela qual armazenamos os dados dessa maneira e não simplesmente em uma tabela única é extensa e não cabe nesse TuringTalks. Porém, munidos com esse entendimento inicial do que está acontecendo no banco, fica fácil entender o que o robô coletor de dados faz!
Raspagem dos dados
Primeiro, definimos quais são os locais cujas previsões iríamos analisar a fim de armazenar, no banco de dados, o nome da cidade e sua respectiva URL no Climatempo, sendo que novos locais podem ser adicionados a partir de um arquivo .csv
por meio de uma função que criamos. Segue, na imagem, a página correspondente à cidade de São Paulo.
No entanto, os gráficos que interessam para o projeto estão na página de previsão para 15 dias. Então, para acessá-la, precisamos interagir dinamicamente com o página, o que evidencia a necessidade de utilizar o Selenium. Com tal ferramenta, navegamos para essa página por meio do botão “15 dias” e encontramos os gráficos correspondentes ao dia atual e aos próximos dois dias, todos seguindo o mesmo formado da seguinte imagem:
Para encontrarmos o código fonte do gráficos e obtermos os dados mostrados por ele, usamos a ferramenta de inspecionar elemento, conforme a próxima imagem:
Isso nos levou a uma tag html div
contendo um atributo chamado data-infos
, sendo que o valor desse atributo corresponde aos dados mostrados no gráfico.
Convertendo esse valor para JSON, obtivemos uma lista que contém um item para cada hora do dia (das 00h às 23h) junto com a temperatura correspondente prevista para cada um desses horários. Esses dados foram encontrados na seguinte forma:
Os dados para o gráfico do dia atual estão na div
de classe wrapper-char-1
, enquanto os dados para os próximos dois dias estão na div
de classe wrapper-chart-2
e wrapper-chart-3
.
Com essas informações, temos tudo que precisamos para realizar a “raspagem” de dados. Em resumo, deve-se seguir o seguinte roteiro:
- Instalar o webdriver desejado a partir da biblioteca
webdriver-manager
; - Instanciar um driver do Selenium;
- Acessar a URL do local, obtida do banco de dados;
- Achar e clicar no botão da página “Previsão 15 dias” com o Selenium;
- Para os dias 1 (atual), 2 e 3:
- Buscar os dados na
div
com a classe correspondente; - Transformar os dados no atributo
data-infos
parajson
; - Extrair as informações relevantes (hora do dia e temperatura);
- Salvar no banco de dados.
Para analisar os dados colhidos a partir da raspagem, exportamos os dados do banco para um arquivo .csv
.
Análise dos dados obtidos
Finalmente, chegou a hora de analisar os frutos de todo esse trabalho!
Recordando, retiramos dados de previsão e dados que consideramos como as medições da temperatura para aquele dia do site Climatempo. Com isso em mãos, foi possível, finalmente, realizar a comparação que era nosso objetivo desde o início.
Foram escolhidas duas cidades, São Paulo e Salvador, das quais iríamos retirar esses dados. Após definidas as cidades, reunimos a previsão de dois dias antes e um dia antes de uma certa data e a temperatura registrada naquele mesmo dia. Então, por exemplo, para o dia 30 de agosto, obtivemos as previsões do dia 29, dois dias antes, e do dia 28, um dia antes. Então comparamos com a temperatura que o site informava para o dia 30 no próprio dia 30 de agosto e consideramos essa temperatura como a medição mais correta.
Então, essas diversas previsões foram dispostas em gráficos para que pudéssemos analisar visualmente o comportamento da previsão conforme os dias passavam. Além disso, calculamos a temperatura média em cada uma das previsões e as comparamos para obter uma espécie de erro médio entre as previsões, ou seja, as temperaturas antes do dia, e a medição, a temperatura no dia.
Os resultados vocês podem ver a seguir. Começaremos por São Paulo:
Pela análise do gráfico acima, notamos que, de modo geral, a temperatura correta do dia 30 de agosto foi maior do que aquela que fora prevista 2 dias antes para a data, enquanto a realizada 1 dia antes é quase completamente correta. Assim, temos que o desvio médio entre a previsão de dois dias antes e a temperatura medida foi de 0.05%; já o desvio médio entre a previsão de um dia antes e a temperatura medida foi de 0.04%.
Agora, vemos que as curvas referentes aos dias 30 (previsão) e 31 (medição) de agosto estão perfeitamente sobrepostas. Já a do dia 29 diverge da temperatura medida no dia 31, pois, de modo geral, esperava-se que o último dia do mês seria mais frio do que efetivamente foi. Portanto, calculamos que o desvio médio entre a previsão de dois dias antes e a temperatura medida foi de 0.06%; enquanto o desvio médio entre a previsão de um dia antes e a temperatura medida foi de 0.00%.
Para o dia 1º de setembro, as previsões mantiveram uma coerência entre elas, pois ambas as curvas referentes às previsões realizadas nos dias anteriores a tal data estão sobrepostas. A temperatura registrada, no entanto, foi superior à esperada, em geral. Encontramos, assim, que o desvio médio entre ambas as previsões e a temperatura medida foi de 0.04%.
As situações observadas em São Paulo foram, de certa forma, bastante semelhantes. Vamos analisar, então, se Salvador mantém um padrão de erro semelhante:
O gráfico representado acima, que compara as diferentes previsões para o dia 30 de agosto em Salvador, apresenta um comportamento inédito nesta análise: tanto as previsões quanto a medição são exatamente iguais. Portanto, para esse dia, temos que o desvio médio entre ambas as previsões e a temperatura medida foi de 0.00% — ou seja, 100% de acerto!
No dia 31 de agosto , porém, não tivemos a mesma sorte. Pelas previsões, era esperado que o dia 31 fosse bem mais quente do que efetivamente foi, com diferenças de até 4 graus. Calculamos, portanto, que o desvio médio entre a previsão de dois dias antes e a temperatura medida foi de -0.04%; e o desvio médio entre a previsão de um dia antes e a temperatura medida foi, também, de -0.04%.
Ao analisarmos as informações do dia 1º de setembro, notamos que a previsão realizada dois dias antes, isto é, no dia 30 de agosto, foi bem mais assertiva que aquela realizada um dia antes. Por isso, vemos que o desvio médio entre a previsão de dois dias antes e a temperatura medida foi de 0.01%; já o desvio médio entre a previsão de um dia antes e a temperatura medida foi de 0.03%.
Conclusão
Ufa! Percorremos um longo caminho! Explicadas as ferramentas utilizadas, a forma como fizemos o Web Scraping e o objetivo dessa raspagem de dados, podemos também tirar algumas conclusões a partir desses dados extraídos e analisados — afinal, para que coletaríamos dados, se não para usá-los?
Apesar de termos sido bastante minuciosos nas checagens de temperatura, devemos levar em conta que, na maior parte dos casos, as previsões feitas com pelo menos dois dias de antecedência apresentam desvios menores do que 1%. Portanto, podemos considerar que as previsões do clima tempo são, em geral, capazes de refletir com grande exatidão as condições climáticas para um dado dia.
Agora você já sabe, né? Quando estiver em dúvida sobre qual roupa escolher para a sua viagem daqui a um ou dois dias, cheque no Climatempo! Agora, se a sua viagem for apenas em 2 meses, que tal nos ajudar a aprofundar este pequeno projetinho introdutório sobre Web Scraping com uma raspagem de dados mais completa, que contemple também as necessidades dos mais ansiosos e curiosos para saber até onde podemos confiar nas previsões climáticas?
Esperamos que você tenha gostado, e agradecemos por chegar até aqui! Se quiser conhecer um pouco mais sobre o que fazemos no Turing USP, não deixe de nos seguir nas redes sociais: Facebook, Instagram, LinkedIn e, claro, ler nossos posts no Medium. E se preferir acompanhar ainda mais de perto e participar de nossas discussões e eventos, você também pode entrar no nosso servidor do Discord.
Um abraço, e até a próxima!