Article image
RAPHAEL SOARES
RAPHAEL SOARES19/10/2024 10:19
Compartilhe

App de cotações de câmbio de diversas moedas usando Web Scraping para extração de dados

  • #Python
  • #API
  • #Selenium

Nesse artigo eu ensino a fazer um Web Scraping (Raspagem de dados na Web) em que são capturados de um site o valor da cotação comercial de várias moedas somente utilizando somente a biblioteca Requests e BeautiulSoup. Depois, eu desenvolvi uma aplicação com interface gráfica que funciona como um sistema de cotações. 

Como funciona

Primeiro eu importo as bibliotecas requests e BeatifulSoup (com o apelido de "bs"):

image

Então eu começo acessando a url do site https://www.remessaonline.com.br/ e concateno com o nome da moeda (valor dentro da variável "moeda"). Ex.: 'https://www.remessaonline.com.br/cotacao/cotacao-'+moeda

Utilizando a biblioteca requests eu busco a url pelo método get. Nele uso a propriedade text (consulta = requests.get(url).text).

Passo essa requisição para o BeatifulSoap ( resultado = bs(consulta) ).

Capturo a classe ".style__Text-sc-1a6mtr6-2" e a atribuo a variável resultado ( resultado = resultado.select('.style__Text-sc-1a6mtr6-2') )

Por fim, busco o primeiro item e uso a propriedade text ( resultado = resultado[0].text )

Segue abaixo o código resumido:

url = 'https://www.remessaonline.com.br/cotacao/cotacao-'+moeda
  
  consulta = requests.get(url).text
  
  resultado = bs(consulta)
  
  resultado = resultado.select('.style__Text-sc-1a6mtr6-2')
  
  resultado = resultado[0].text
  
  print(f'Cotação: {resultado}')

  moeda_convertida = resultado[0:4]
  moeda_convertida = float(moeda_convertida.replace(',','.'))

Segue abaixo o código completo:

import requests
from bs4 import BeautifulSoup as bs

print("""
Escolha a Moeda:

[1] - Dólar
[2] - Euro
[3] - Libra Esterlina
[4] - Dólar Australiano
[5] - Franco Suiço
[6] - Yene Japonês
[7] - Peso Argentino
[8] - Novo Sol Peruano
[9] - Boliviano
[10] - Yuan Chinês
[11] - Dólar de Singapura
[12] - Lira Turca
[13] - Dólar de Hong Kong
[14] - Sair
""")

lista_moedas = [
  'dolar',
  'euro',
  'libra-esterlina',
  'dolar-australiano',
  'franco-suico',
  'iene-japones',
  'peso-argentino',
  'novo-sol',
  'boliviano',
  'yuan-chines',
  'dolar-singapura',
  'lira-turca',
  'dolar-hong-kong'   
]

moeda = int(input("Opção: "))

if moeda >= 14:
  print('Você saiu do programa')
else:  
  moeda = lista_moedas[moeda-1]
  print(f'Cód.: {moeda}')
  
  url = 'https://www.remessaonline.com.br/cotacao/cotacao-'+moeda
  
  consulta = requests.get(url).text
  
  resultado = bs(consulta)
  
  resultado = resultado.select('.style__Text-sc-1a6mtr6-2')
  
  resultado = resultado[0].text
  
  print(f'Cotação: {resultado}')

  moeda_convertida = resultado[0:4]
  moeda_convertida = float(moeda_convertida.replace(',','.'))

Após executar o código, irão aparecer as opções de moedas. Após escolher uma das opções, vai aparecer o valor da cotação:

image

Interface gráfica

No aplicativo de interface você escolhe uma moeda:

image

image

Depois, digite o valor a converter (quanto em moeda estrangeira você deseja converter para o Real):

image

Por fim, clique em "Clique aqui!" e o valor da cotação aparecerá:

image

Segue abaixo o código completo:

from tkinter import *
from tkinter import messagebox
from tkinter.ttk import Combobox
import requests
from bs4 import BeautifulSoup as bs

dict_moedas = {
  'Dólar': 'dolar',
  'Euro': 'euro',
  'Libra Esterlina': 'libra-esterlina',
  'Dólar Australiano': 'dolar-australiano',
  'Dólar Canadense': 'dolar-canadense',
  'Franco Suiço': 'franco-suico',
  'Yene Japonês': 'iene-japones',
  'Peso Argentino': 'peso-argentino',
  'Peso Uruguaio': 'peso-uruguaio',
  'Novo Sol Peruano': 'novo-sol',
  'Boliviano': 'boliviano',
  'Yuan Chinês': 'yuan-chines',
  'Dólar de Singapura': 'dolar-singapura',
  'Lira Turca': 'lira-turca',
  'Dólar de Hong Kong': 'dolar-hong-kong'   
}

tela = Tk()
tela.geometry('750x500')
tela.title('Cotações')

titulo = Label(tela, text='COTAÇÕES DE MOEDAS (COMERCIAL)', font='Arial 20 bold')
titulo.pack(pady=25, padx=50)

def exibe_valor(): 
 try:
     moeda =  dict_moedas[combo.get()]
     url = 'https://www.remessaonline.com.br/cotacao/cotacao-'+moeda
      
     consulta = requests.get(url).text
      
     resultado = bs(consulta)
      
     resultado = resultado.select('.style__Text-sc-1a6mtr6-2')
      
     resultado = resultado[0].text  
  
     moeda_convertida = resultado[0:4]
     moeda_convertida = float(moeda_convertida.replace(',','.')) 
 
     valor = float(entrada1.get())
     valor_final = 'R$ '+str(round(valor * moeda_convertida,2)).replace('.',',')
     
     if len(valor_final) <8:
          resultado = valor_final+'0'
     else:
          resultado = valor_final
      
     mensagem['text'] = resultado
     
 except:
      messagebox.showwarning('Erro', 'Escolha a moeda ou digite o valor a converter')

rotulo1 = Label(tela, text='Escolha a moeda:', font='Arial 20')
rotulo1.pack(pady=1,padx=15)

combo = Combobox(tela, font='Arial 20')
combo['values']= ('Dólar', 'Euro', 'Libra Esterlina','Dólar Australiano','Dólar Canadense',
                'Franco Suiço','Yene Japonês','Peso Argentino','Peso Uruguaio','Novo Sol Peruano',
               'Boliviano','Yuan Chinês','Dólar de Singapura','Lira Turca','Dólar de Hong Kong')
combo.current(0)
combo.pack(pady=15,padx=15)

rotulo2 = Label(tela, text='Digite o valor a converter:', font='Arial 20')
rotulo2.pack(pady=1,padx=15)

entrada1 = Entry(tela, font="arial 20", width=21, text='um')
entrada1.pack(pady=15,padx=15)

rotulo3 = Label(tela, text='Valor em Reais:', font='Arial 20')
rotulo3.pack(pady=1,padx=15)

botao = Button(tela, text="Clique Aqui!", width = 26, font='Arial 15 bold',bg='blue', fg='white', command=exibe_valor)
botao.pack(pady=15,padx=15)

mensagem = Label(tela, font="arial 20 bold")
mensagem.pack(pady=15,padx=15)

tela.mainloop()

Downloads

Segue abaixo o link do GitHub:

https://github.com/phael8919/webscraping_cotacao_varias_moedas

No diretório, há quatro arquivos:

image

  1. arquivo .rar com o arquivo executável da interface gráfica;
  2. Arquivo do Jupyter notebook contendo os códigos com e sem interface gráfica;
  3. Um arquivo .md com a descrição do diretório;
  4. Um arquivo .py com o código completo.

Se você deseja instalar o programa no computador, baixe o arquivo .rar e descompacte-o clicando com lado direito do mouse e depois em "Extrair aqui":

image

depois irão aparecer duas pastas: build e dist:

image

Entre na pasta dist e depois clique na pasta Cotações, lá clique no arquivo "cotaxoes.exe":

image

E pronto, a interface gráfica é aberta:

image

Se deseja, você pode criar um atalho direto na área de trabalho, basta clicar com o lado direito no arquivo, clicar em "Enviar para" e depois "Área de trabalho (criar atalho):image

E pronto! Você tem um atalho rápido para acessar o app.

Compartilhe
Comentários (0)