Python – Iniciar sesión y descargar un archivo específico del sitio web

Mi bash de iniciar sesión en un sitio web y descargar un archivo específico ha tenido una caída.

Específicamente, estoy ingresando a este sitio web http://www.gaez.iiasa.ac.at/w/ctrl?_flow=Vwr&_view=Welcome&fieldmain=main_lr_lco_cult&idPS=0&idAS=0&idFS=0

para poder seleccionar variables y parámetros específicos antes de descargar el archivo y guardarlo como excel o csv.

En particular, quiero cambiar las entradas resaltadas entradas , antes de seleccionar el tipo de cultivo, suministro de agua, nivel de entrada, período de tiempo y áreas geográficas antes de descargar el archivo en el botón “Visualización y descarga”.

Por ejemplo, me gustaría obtener los datos de Trigo (Cultivo), lluvia (Suministro de agua), Alto (Nivel de entrada), 1961-1990 (Periodo de tiempo, Línea de base), Estados Unidos de América (Áreas geográficas). Entonces quiero guardarlo como un archivo de excel.

Este es mi código hasta ahora:

# Import library import requests # Define url, username, and password url = 'http://www.gaez.iiasa.ac.at/w/ctrl?_flow=Vwr&_view=Welcome&fieldmain=main_lr_lco_cult&idPS=0&idAS=0&idFS=0' user, password = 'Username', 'Password' resp = requests.get(url, auth=(user, password)) 

Tal vez estoy arraigado en las trincheras de todo el proceso para ver una solución fácil y viable, pero cualquier ayuda es muy apreciada.

El sitio web al que ha vinculado utiliza el inicio de sesión basado en HTTP POST. En tu código tienes:

 resp = requests.get(url, auth=(user, password)) 

que utilizará la autenticación http básica http://docs.python-requests.org/en/master/user/authentication/#basic-authentication

Para iniciar sesión en este sitio necesita dos cosas:

  • cookie de sesión persistente
  • Solicitud HTTP POST para iniciar sesión en la URL

En primer lugar, vamos a crear un objeto de sesión que contenga cookies del servidor http://docs.python-requests.org/en/master/user/advanced/#session-objects

 s = requests.Session() 

A continuación, debe visitar el sitio utilizando la solicitud GET. Esto generará una cookie para usted (el servidor enviará una cookie para su sesión).

 s.get(site_url) 

El paso final será iniciar sesión en el sitio. Puede usar Firebug o Chrome Developer Console (dependiendo del navegador que use) para examinar qué campos deben enviarse (vaya a la pestaña Red).

 s.post(site_url, data={'_username': 'user', '_password': 'pass'}) 

Estos dos campos (nombre de usuario, contraseña) parecen ser válidos para su sitio, pero al examinar los datos que se enviaron durante la solicitud POST, había más campos. No sé si son necesarios.

Después de eso será autenticado. Lo siguiente será visitar la URL para el archivo que desea descargar.

 s.get(file_url) 

El enlace que proporcionó contiene una cadena de consulta con varias opciones que probablemente están relacionadas con las opciones que desea resaltar. Puedes usarlo para descargar archivos con las opciones deseadas.

Nota de advertencia

Tenga en cuenta que este sitio no está utilizando una conexión segura HTTPS. Cualquier credencial que proporcione irá a través de Internet sin cifrar y puede ser vista por alguien que no debería verla.