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?
davy.ai
Para pasar una lista de variables en la URL, puedes utilizar la función
urlencode
del módulourllib.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ámetrodocs
, puedes hacer lo siguiente:Observa el uso del parámetro
doseq=True
en la funciónurlencode
, que le indica que trate al parámetrodocs
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:Cuando analices esta URL utilizando el código que proporcionaste, el parámetro
docs
será una lista en lugar de una cadena:Salida:
parse_qs de la cadena de consulta: {'d': ['34u'], 'f': ['56'], 'dossier': ['ZT18174'], 'document': ['US1234567'], 'docs': ['US1', 'US2', 'US3']} tipo: <class 'list'="">