Quiero descargar archivos de una página web que ofrece descargas públicas.
Tengo poca experiencia con el mundo de las páginas web, por lo que inicialmente escribí un script simple usando selenio que resuelve el problema, sin embargo, esta forma de obtener los datos me parece demasiado retorcida. Por lo tanto, he intentado descargar el archivo a través de solicitudes POST, investigando un poco el panel de herramientas "Red" logré encontrar la solicitud que aparentemente ordena la descarga.
El botón que aparece rodeado en la imagen lanza las tres solicitudes que aparecen a la derecha, excepto que la primera vez que se descarga el archivo, aparece una solicitud más (esto se puede ver arriba de las solicitudes resaltadas).
Sin embargo, la respuesta de esta solicitud, lejos de ser el contenido que me permitiría escribir el archivo deseado, es más como un fragmento de código html que corresponde al contenido que se muestra cuando en el panel de red hago doble clic en "downloadDir":
¿Qué me podría estar perdiendo? ¿Alguien sabe como solucionar el problema o no es posible por esta vía?
Debe usar el paquete de solicitudes en lugar de ejecutar curl u otros procesos:
import requests response = requests.post('https://localhost:4000/bananas/12345.png', data = '[ 1, 2, 3, 4 ]') data = response.contentdata contiene el contenido descargado después de eso, que puede almacenar en el disco, por ejemplo:
with open(path, 'wb') as s: s.write(data)