2
respostas

Retorno do ultimo parâmetro faltando um caractere

Estou com o seguinte problema: Baseado no exercício montei um script para extrair um termo de uma URL, segue:

url ='https://cursos.alura.com.br/course/string-python-extraindo-informacoes-url/task/91882'
tamanho_url = len(url) + 1

parametro1 = 'task'
parametro2 = '&'

busca_parametro1 = url.find(parametro1) + len(parametro1) + 1
busca_parametro2 = url.find(parametro2,busca_parametro1)
resultado = url[busca_parametro1:busca_parametro2]
parametro2 = tamanho_url if resultado == -1 else parametro2
print(resultado)
print(url)

porem o retorno no terminal é esse:

9188

Qual seria o motivo de não estar apresentando o valor inteiro procurado, no caso 91882?

2 respostas

Basicamente, a sua URL não foi feita para funcionar com esse algoritmo. O task não é um parâmetro, mas sim uma "pasta" da URL (caminho, para ser mais exato). Você precisa ou mudar a URL ou modificar o algoritmo (no caso o algoritmo não seria para extrair valores de uma URL, mas para encontrar as subpastas).

Mas, caso queira saber o porque disso acontecer, eu explico. Testei seu código e a substring que ele imprime é do índice do número 9 (inicio do valor) até, sem incluir, o -1 (que, para o Python, é o último item (caractere) de uma string/lista/iterável. Por isso ele não imprime o último digito. Para imprimir, deveria ser [80:] (iniciando do caractere 80 até o último caractere incluso). Para ter o restante da string, é só botar o : e omitir o próximo item.

Modifiquei seu código e coloquei alguns comentários explicativos. Alterei a URL, no caso, para o algoritmo funcionar corretamente. Espero que ajude.

# URL que será utilizada para a extração de parâmetros.
url = 'https://cursos.alura.com.br/course/string-python-extraindo-informacoes-url?task=91882&user=Ricardo123'

# Parâmetros que serão procurados na URL.
parametro_1 = 'task'
parametro_2 = 'user'

# Índices do início dos parâmetros
indice_parametro_1 = url.find(parametro_1)
indice_parametro_2 = url.find(parametro_2)

# Início e final do valor do parâmetro 1 O início do valor é o indice do parâmetro (que é o índice do início do
# parâmetro, que é task) + o tamanho do nome do parametro + 1 (esse 1 é para desconsiderar o caractere = ).
inicio_valor_1 = indice_parametro_1 + len(parametro_1) + 1

# O final do valor é o índice do início do próximo parâmetro (user) - 1 (para selecionar o &)
final_valor_1 = indice_parametro_2 - 1

# Início do valor do parâmetro 1
inicio_valor_2 = indice_parametro_2 + len(parametro_2) + 1

# Lembre-se: no fatiamento o valor após o : é exclusivo (desconsiderado), portanto o & não será incluso.
valor_parametro_1 = url[inicio_valor_1:final_valor_1]

# Como esse é o último valor, podemos simplesmente não colocar nada após os : para indicar que queremos
# todo o restante da string.
valor_parametro_2 = url[inicio_valor_2:]

print(valor_parametro_1)
print(valor_parametro_2)

@Samuel Figueira, obrigado pela atenção! Entendi oque você disse, porem a minha intenção era fazer um script genérico passando dois parâmetros para capturar qualquer elemento, independente se for valor, pasta, etc..

Revi as aulas e consegui corrigir para funcionar da forma que eu queria, segue:

url = 'https://cursos.alura.com.br/course/string-python-extraindo-informacoes-url/task/91876'


parametro_busca1 = 'course'
parametro_busca2 = '-'

indice_parametro = url.find(parametro_busca1)
indice_valor = indice_parametro + len(parametro_busca1) + 1
indice_parametro2 = url.find(parametro_busca2, indice_valor)
valor = url[indice_valor:indice_parametro2]
if indice_parametro2 == -1:
    valor = url[indice_valor:]
else:
    valor = url[indice_valor:indice_parametro2]

print(valor)

Nesse exemplo minha intenção era capturar a palavra ' string ' sendo que passei a palavra ' course ' pedindo para capturar oque estive até chegar no caractere '_' . Funcionou certinho.

Resposta:

c:/Users/ricardoh/Desktop/programacao/codigos_python/algoritimo.py
string

agora consigo capturar também o valor que não conseguia antes:

url = 'https://cursos.alura.com.br/course/string-python-extraindo-informacoes-url/task/91876'


parametro_busca1 = 'task'
parametro_busca2 = '&'

indice_parametro = url.find(parametro_busca1)
indice_valor = indice_parametro + len(parametro_busca1) + 1
indice_parametro2 = url.find(parametro_busca2, indice_valor)
valor = url[indice_valor:indice_parametro2]
if indice_parametro2 == -1:
    valor = url[indice_valor:]
else:
    valor = url[indice_valor:indice_parametro2]

print(valor)

Retorno:

c:/Users/ricardoh/Desktop/programacao/codigos_python/algoritimo.py
91876

e assim com qualquer outro termo, independente do tipo. De toda forma agradeço!

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software