Saltar al contenido

Python-Requests, extrae parámetros de URL de un string

Bienvenido a nuestro espacio, en este sitio hallarás la solucíon que estás buscando.

Solución:

No puede utilizar requests para esto; la biblioteca construye tales URL si se pasa una estructura de Python para los parámetros, pero no ofrece ninguna herramienta para analizarlos. Ese no es un objetivo del proyecto.

Quédate con el urllib.parse método para analizar los parámetros. Una vez que tenga un diccionario o una lista de key-tuplas de valor, solo pásalo a requests para construir la URL de nuevo:

try:
    # Python 3
    from urllib.parse import urlparse, parse_qs
except ImportError:
    # Python 2
    from urlparse import urlparse, parse_qs

o = urlparse(url)
query = parse_qs(o.query)
# extract the URL without query parameters
url = o._replace(query=None).geturl()

if 'token' in query:
    query['token'] = 'NEW_TOKEN'

requests.get(url, params=query)

Puedes conseguir tanto el urlparse y parse_qs funciona tanto en Python 2 como en 3, todo lo que necesita hacer es ajustar la ubicación de importación si obtiene una excepción.

Demostración en Python 3 (sin la protección de excepción de importación) para demostrar que se ha creado la URL:

>>> from urllib.parse import urlparse, parse_qs
>>> url = "http://httpbin.org/get?token=TOKEN_TO_REPLACE¶m2=c"
>>> o = urlparse(url)
>>> query = parse_qs(o.query)
>>> url = o._replace(query=None).geturl()
>>> if 'token' in query:
...     query['token'] = 'NEW_TOKEN'
... 
>>> response = requests.get(url, params=query)
>>> print(response.text)

  "args": 
    "param2": "c", 
    "token": "NEW_TOKEN"
  , 
  "headers": 
    "Accept": "*/*", 
    "Accept-Encoding": "gzip, deflate", 
    "Host": "httpbin.org", 
    "User-Agent": "python-requests/2.5.1 CPython/3.4.2 Darwin/14.1.0"
  , 
  "origin": "188.29.165.245", 
  "url": "http://httpbin.org/get?token=NEW_TOKEN¶m2=c"

Utilizando requests solamente:

query = requests.utils.urlparse(url).query
params = dict(x.split('=') for x in query.split('&'))

if 'token' in params:
    params['token'] = 'NEW_TOKEN'

requests.get(url, params=params)

Si conservas algún reparo o forma de modernizar nuestro sección eres capaz de dejar una crítica y con placer lo ojearemos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *