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

    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)