Eu fiz de uma maneira um pouco diferente:
import re
class Busca:
def __init__(self, url, *parametros) -> None:
#pode receber mais de um parametro de busca
self.url, self.parametros = self.parametros_check(url, parametros)
def parametros_check(self, url, args):
#não quis implementar o regex aqui por que limitaria a url à bytebank
if not url.strip():
raise ValueError('A URL está vazia')
for item in args:
if not item.strip():
raise ValueError('não é possivel buscar um parametro vazio')
return url, args
@property
def url_base(self):
return self.url[:url.find('?')]
@property
def url_parametros(self):
resultado = []
for parametro in self.parametros:
atributos = self.url[len(self.url_base)+1:]
filtrado = atributos[atributos.find(parametro)+len(parametro)+1:]
if filtrado.find('&') != -1:
#desta forma é possivel verificar em qualquer URL
resultado.append(filtrado[:filtrado.find('&')].replace('+', ' '))
else:
resultado.append(filtrado.replace('+', ' '))
return resultado
def conversor(self):
dolar = 5.50
quantidade = float(self.url_parametros[0])
return f'R${quantidade:.2f} é o mesmo que U${quantidade * dolar:.2f}'
#passo a quantidade de reais através da url
url = 'http://bytebank.com/cambio?moedaOrigem=real&moedaDestino=dolar&quantidade=80'
valor = Busca(url,'quantidade').conversor()
print(valor)