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"):
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:
Interface gráfica
No aplicativo de interface você escolhe uma moeda:
Depois, digite o valor a converter (quanto em moeda estrangeira você deseja converter para o Real):
Por fim, clique em "Clique aqui!" e o valor da cotação aparecerá:
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:
- arquivo .rar com o arquivo executável da interface gráfica;
- Arquivo do Jupyter notebook contendo os códigos com e sem interface gráfica;
- Um arquivo .md com a descrição do diretório;
- 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":
depois irão aparecer duas pastas: build e dist:
Entre na pasta dist e depois clique na pasta Cotações, lá clique no arquivo "cotaxoes.exe":
E pronto, a interface gráfica é aberta:
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):
E pronto! Você tem um atalho rápido para acessar o app.