Estoy tratando de recuperar un archivo de 500mb usando Python, y tengo un script que usa urllib.urlretrieve()
. Parece que hay un problema de red entre el sitio de descarga y yo, ya que esta llamada cuelga constantemente y no se completa. Sin embargo, usar wget
para recuperar el archivo tiende a funcionar sin problemas. ¿Cuál es la diferencia entre urlretrieve()
y wget
que podría causar esta diferencia?Diferencia entre Python urllib.urlretrieve() y wget
Respuesta
La respuesta es bastante simple. Python's urllib
y urllib2
no son tan maduros y robustos como podrían ser. Incluso mejor que wget en mi experiencia es cURL
. He escrito un código que descarga gigabytes de archivos a través de HTTP con tamaños de archivo que van desde 50 KB a más de 2 GB. Que yo sepa, cURL es el software más confiable del planeta en este momento para esta tarea. No creo que python, wget, o incluso la mayoría de los navegadores web puedan igualarlo en términos de corrección y robustez de la implementación. En una python lo suficientemente moderna que use urllib2 de la manera correcta, se puede hacer bastante confiable, pero todavía ejecuto un subproceso curl y eso es absolutamente sólido como una roca.
Otra forma de decir esto es que cURL hace una sola cosa y lo hace mejor que cualquier otro software porque ha tenido mucho más desarrollo y refinamiento. Python's urllib2
es útil y conveniente y funciona lo suficientemente bien para cargas de trabajo de pequeñas a medias, pero cURL está muy por delante en términos de confiabilidad.
Además, rizo tiene numerosas opciones para ajustar el comportamiento fiabilidad incluyendo reintentar el recuento de tiempo de espera, valores, etc.
Si está utilizando:
page = urllib.retrieve('http://example.com/really_big_file.html')
va a crear una cadena de 500 mb, que bien puede gravar a su máquina, que sea lento, y provocar que la línea de tiempo de espera. Si es así, debe utilizar:
(filename, headers) = urllib.retrieve('http://...', 'local_outputfile.html')
que no impondrá impuestos al intérprete.
Vale la pena señalar que urllib.retrieve() usa urllib.urlopen() which is now deprecated.
- 1. Python: diferencia entre `is` y` == `?
- 2. Diferencia entre '' y "" en Python
- 3. configuración URL de referencia en python urllib.urlretrieve
- 4. Usando wget vía Python
- 5. Diferencia en python entre basestring y types.StringType?
- 6. Python: ¿diferencia entre os.access y os.path.exists?
- 7. ¿Hay alguna diferencia entre CPython y Python
- 8. Diferencia entre dict.clear() y asignar {} en Python
- 9. Python: La diferencia entre usar "y "
- 10. Diferencia entre exit() y sys.exit() en Python
- 11. Diferencia entre Memcache y Python diccionario
- 12. ¿Cuál es la diferencia entre python activo y python?
- 13. wget Vs urlretrieve of python
- 14. Cómo atrapar el error 404 en urllib.urlretrieve
- 15. Diferencia entre PyMODINIT_FUNC y PyModule_Create
- 16. Diferencia entre mapa y dict
- 17. Diferencia entre qt y PyQt4
- 18. MySQL: diferencia entre ', `,' y"
- 19. Diferencia entre objeto y *?
- 20. Diferencia entre. y #
- 21. ¿Diferencia entre == y caso?
- 22. La diferencia entre $ * y $ @
- 23. Diferencia entre & y &
- 24. VBA: Diferencia entre y y +
- 25. Diferencia entre $ HOME y '~' (tilde)?
- 26. módulo de Python archivo zip: diferencia entre zipfile.ZIP_DEFLATED y zipfile.ZIP_STORED
- 27. Diferencia en SHA512 entre python hashlib y la herramienta sha512sum
- 28. Diferencia entre clase foo y clase foo (objeto) en Python
- 29. diferencia entre eficiencia y dict.has_key clave en dict en Python
- 30. Diferencia entre rendimiento en Python y rendimiento en C#
Buen punto, aunque yo estoy usando la versión más larga que guarda en un archivo. – jrdioko