es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Crear y analizar una URL que tenga que incluir una variable que sea una lista de cadenas de texto.

Estoy utilizando el siguiente código para analizar una URL:

url3 = “https://flyingcar.org/dfr/?d=34u&f=56&dossier=ZT18174&document=US1234567&docs='US1','US2','US3'#{'para1':'UK','para2':'Ireland'}”

parsed = urlparse(url3)
print(‘url:\n’, url3)

captured_values = parse_qs(parsed.query)
print(f’parse_qs de las consultas: {captured_values} tipo: {type(captured_values)}’)
print(f’aquí los parámetros: {parsed.fragment} tipo: {type(parsed.fragment)}’)

Funciona más o menos bien. Lo que no sé es cómo construir la URL para pasar una lista de variables. Es decir, en el ejemplo anterior, los resultados son:

url:
https://flyingcar.org/dfr/?d=34u&f=56&dossier=ZT18174&document=US1234567&docs='US1','US2','US3'#{'para1':'UK','para2':'Ireland'}
parsed.params=''
parsed.query="d=34u&f=56&dossier=ZT18174&document=US1234567&docs='US1','US2','US3'"
parsed.fragment="{'para1':'UK','para2':'Ireland'}"
parse_qs de las consultas: {‘d’: [’34u’], ‘f’: [’56’], ‘dossier’: [‘ZT18174’], ‘document’: [‘US1234567’], ‘docs’: [“‘US1′,’US2’,’US3′”]} tipo:
aquí los parámetros: {‘para1′:’UK’,’para2′:’Ireland’} tipo:

Me gustaría que en la consulta la variable ‘docs’ contenga una lista en lugar de una cadena, como:

‘docs’: [‘US1′,’US2′,’US3’]

en lugar de:

‘docs’: [“‘US1′,’US2’,’US3′”]

¿Cómo debo construir la URL?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para pasar una lista de variables en la URL, puedes utilizar la función urlencode del módulo urllib.parse para codificar la lista como una cadena y luego incluirla en la cadena de consulta. Por ejemplo, para pasar una lista de documentos como el parámetro docs, puedes hacer lo siguiente:

    from urllib.parse import urlencode
    
    docs = ['US1', 'US2', 'US3']
    params = {'d': '34u', 'f': '56', 'dossier': 'ZT18174', 'document': 'US1234567', 'docs': docs}
    query_string = urlencode(params, doseq=True)
    url = f"https://flyingcar.org/dfr/?{query_string}#{'para1': 'UK', 'para2': 'Ireland'}"
    

    Observa el uso del parámetro doseq=True en la función urlencode, que le indica que trate al parámetro docs como una secuencia (es decir, una lista) y codifique cada valor por separado con la misma clave.

    La URL resultante tendrá el parámetro docs como una lista en la cadena de consulta:

    https://flyingcar.org/dfr/?d=34u&f=56&dossier=ZT18174&document=US1234567&docs=US1&docs=US2&docs=US3#{'para1': 'UK', 'para2': 'Ireland'}
    

    Cuando analices esta URL utilizando el código que proporcionaste, el parámetro docs será una lista en lugar de una cadena:

    parsed = urlparse(url)
    captured_values = parse_qs(parsed.query)
    print(f'parse_qs de la cadena de consulta: {captured_values} tipo: {type(captured_values["docs"])}')
    

    Salida:

    parse_qs de la cadena de consulta: {'d': ['34u'], 'f': ['56'], 'dossier': ['ZT18174'], 'document': ['US1234567'], 'docs': ['US1', 'US2', 'US3']} tipo: <class 'list'="">

Comments are closed.