comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

[Python] Descargar Archivos - by NiKo

  • 3 Respuestas
  • 3446 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado ProcessKill

  • *
  • Underc0der
  • Mensajes: 154
  • Actividad:
    0%
  • Reputación 0
  • Arriba los hackers de Argentina!
    • Ver Perfil
    • Email
« en: Febrero 24, 2010, 04:04:47 pm »
Bueno esto es simplemente un mini-tutorial acerca de las distintas alternativas que tenemos en python
para descargar archivos.
Python es un lenguaje que facilita todo gracias a los diversos modulos que vienen ya preinstalados con el interprete
los cuales simplifican mucho las tareas que serian muy dificiles o aburridas para hacer, con respecto al tratamiento
web el interprete python viene con modulos como urllib, urllib2, httplib, cookielib, etc. que ahorran el trabajo de
hacer las cosas directamente con sockets.

Para descargar un archivo hay varias opciones:
         * Trabajar directamente con sockets.
         * Utilizar los modulos que se especializan en interaccion web (urllib, urllib2).
         * Usar modulos y paquetes externos a los estandar, ejemplo: PyCurl.
         
         
1.- Descargar usando el modulo urllib:
   Para descargar un archivo usando este modulo, hay que hacer uso de la funcion en el llamada "urlretrieve".
   Esta funcion toma tres parametros: El primero es la url del archivo. El segundo parametro es el nombre del archivo
   con el que se va a guardar. Y el tercer parametro sirve para especificar si se quiere mostrar el progreso de
   la descarga, a lo cual si se quiere mostrar se pasa el parametro que debe ser una funcion que debe contener tres
   parametros numericos, esta funcion luego sera llamada y nos sirve a nosotros para especificar el progreso de la descarga
   por ejemplo.
   Bueno echa ya la explicacion de como funcion urlretrieve les dejo un code para que se aclare un poco mas la cosa:
   ---------------------------------------------------------------------------------------------------------------------------
   
Código: Python
  1.         #! /usr/bin/env python
  2.  
  3.         import urllib, sys #Importamos urllib para utilizar urlretrieve, y sys para printear con 'sys.stdout.write'
  4.  
  5.         def funcionprogreso(bloque, tamano_bloque, tamano_total): #Definimos la funcion de progreso con tres parametros que tomaran los valores que les pase la funcion urlretrieve
  6.                 cant_descargada = bloque * tamano_bloque #Cantidad descargada = Bloque descargado 1 * cantidad de bytes que tiene cada bloque
  7.                 sys.stdout.write('\rCantidad descargada: %s bytes / %s bytes totales' % (cant_descargada, tamano_total)) #Imprimimos el progreso de la descarga
  8.        
  9.         archivo = urllib.urlretrieve("http://forum.get-r00t.com/Themes/tux_Red_Planet/images/tuxspace.png", "tux.png", reporthook=funcionprogreso) # Descargamos el archivo pasandole
  10.         #los tres parametros (Url_del_archivo, nombre_de_archivo_en_disco, informacion_progreso)
  11.         #Nota si no quieres mostrar ningun progreso durante la descarga solo pon asigna reporthook como None.
  12.        
   -------------------------------------------------------------------------------------------------------------------------------
   
   
   
2.- Descargar usando el modulo urllib2:
   En el modulo urlib2 no contamos con la funcion retrieve pero eso no significa que no podamos descargar un archivo....
   Este metodo es el que yo uso simplemente por costumbre xD...
   Bueno los pasos para descargar son muy sencillos, cargamos urllib2 (obvio no? xD) abrimos la url con la funcion urlopen() leemos el contenido
   del archivo remoto y lo vamos copiando a un archivo.
   El tema del progreso de la descarga es bastante sencillo yo conozco solo dos opciones para lo fundametal y mas importante para el progreso de la
   descarga que es el tamaño del archivo para sacar el tamaño yo conozco solo dos formas:
   La primera y que mas me gusta seria obtener informacion del archivo que habrimos con urlopen (que no son mas que cabeceras http) mediante el metodo info(), luego de todas
   las cabeceras que retorna esa funcion sacar la unica que nos importa que seria en este caso: Content-Length.
   La otra forma es utilizando el metodo __len__() que mide la longitud de un objeto... vale la pena aclarar que todos los objetos en python cuentan con este y otros metodos mas
   predefinidos.
   Y aca lo mas importante y lo que va a terminar de aclarar todo.. el code de ejemplo:
   ----------------------------------------------------------------------------------------------------------------------------------------------------------------
   
Código: Python
  1.         #! /usr/bin/env python
  2.  
  3.         import urllib2, sys #Importamos urllib2 y sys
  4.  
  5.         archivo = urllib2.urlopen("http://forum.get-r00t.com/Themes/tux_Red_Planet/images/tuxspace.png") #Abrimos el archivo que vamos a descargar
  6.         informacion_tamano = archivo.info() #Obtenemos un par de headers que nos dan informacion acerca del archivo
  7.         tamano_archivo = informacion_tamano.getheaders("Content-Length")[0] #Obtenemos el tamano del archivo a traves del header Content-Length
  8.         tamano_archivo = int(tamano_archivo) / 1024 #Pasamos el tamano a kilobytes
  9.         byte = 1
  10.         arch = open('tuxspace.png', 'wb') #Abrimos el archivo para escribirlo
  11.         while (byte != tamano_archivo): #Mientras el numero byte leido sea distinto al ultimo byte del archivo
  12.                 arch.write(archivo.read(byte)) #Escribir byte
  13.                 byte += 1 #Agregar uno al contador para que no escriba siempre el mismo byte xD
  14.                 sys.stdout.write('\r[*]Descargados:  %8s Kbs de %s Kbs' % (byte, tamano_archivo)) #Mostrar la informacion de la descarga
  15.         arch.close() # Cerrar el archivo
  16.        
   ----------------------------------------------------------------------------------------------------------------------------------------------------------------

Bueno era eso nada mas, aunque es re basico y lo explique a las apuradas, ojala a alguien le sirva xD
Saludos !!
« Última modificación: Marzo 23, 2015, 12:15:41 pm por Expermicid »

Desconectado ele

  • *
  • Underc0der
  • Mensajes: 1
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
    • Email
« Respuesta #1 en: Octubre 25, 2012, 04:26:43 pm »
Hola una pregunta, en donde quedan las descargas que hago desde python, saludos

Desconectado Sanko

  • *
  • Underc0der
  • Mensajes: 541
  • Actividad:
    0%
  • Reputación 0
  • ¿Puedes?
    • Ver Perfil
    • Underc0de
« Respuesta #2 en: Octubre 25, 2012, 06:02:49 pm »
No tienes permisos para ver links. Registrate o Entra con tu cuenta
Hola una pregunta, en donde quedan las descargas que hago desde python, saludos
Donde puedes leer
Código: No tienes permisos para ver links. Registrate o Entra con tu cuenta
"tux.png" , ahi pones la ruta.
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Desconectado BigBear

  • *
  • Underc0der
  • Mensajes: 543
  • Actividad:
    0%
  • Reputación 3
    • Ver Perfil
« Respuesta #3 en: Noviembre 03, 2012, 11:50:45 am »
que nostalgia este tema lo lei en code-makers hace 3 años xDD.

 

¿Te gustó el post? COMPARTILO!



[Código] Yardas a metros - Metros a yardas [Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1421
Último mensaje Mayo 29, 2011, 01:27:34 am
por LucaSthefano
Python phpmyadmin "BruteForce"

Iniciado por linkgl

Respuestas: 2
Vistas: 2550
Último mensaje Agosto 19, 2011, 12:14:37 pm
por linkgl
Python keylogger - by "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 0
Vistas: 2061
Último mensaje Abril 07, 2010, 03:30:22 am
por d33k40
[Código] Entero / No Entero [Ejercicio - Python]

Iniciado por LucaSthefano

Respuestas: 0
Vistas: 1390
Último mensaje Mayo 29, 2011, 01:24:09 am
por LucaSthefano
Python Trojan - By "bLiNdFiR3"

Iniciado por d33k40

Respuestas: 1
Vistas: 2114
Último mensaje Abril 03, 2010, 11:01:59 pm
por Dharok