es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Quiero descargar archivos con Python usando wget (FTP), pero ocurrió un error. Por favor, ayuda con la descarga.

Quiero descargar archivos “*_ice.nc” en ftp. Entonces…

biblioteca

import wget
import math
import re
from urllib import request

dirección y lista de archivos

url = "ftp://ftp.hycom.org/datasets/GLBy0.08/expt_93.0/data/hindcasts/2021/" #url
html = request.urlopen(url) #abrir url
html_contents = str(html.read().decode("cp949"))
url_list = re.findall(r"(ftp)(.+)(_ice.nc)", html_contents)

bucle para descargar

for url in url_list: #bucle
    url_full="".join(url) #tupla a cadena
    file_name=url_full.split("/")[-1]
    print('\nDescargando ' + file_name)
    wget.download(url_full) #descargar con wget

pero se produjo un mensaje de error como este
(ValueError: unknown url type: ‘ftp%20%20%20%20%20%20ftp%20%20%20%20%20%20382663848%20Jan%2002%20%202021%20hycomGLBy0.089302021010112t000_ice.nc’)

¿Podría recibir algo de ayuda?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que hay un problema con la URL de FTP. La URL tiene caracteres no deseados, como los espacios adicionales y el tamaño y la fecha del archivo. Una solución es eliminar estos caracteres no deseados de la URL antes de pasarla a la función wget.download(). Aquí tienes un fragmento de código actualizado que debería funcionar:

    for url in url_list: # recorre la lista de URL
        url_completa = ''.join(url) # convierte la tupla en una cadena de texto
        nombre_archivo = url_completa.split('/')[-1] # extrae el nombre del archivo de la URL
        url_completa = url_completa.replace(' ', '%20') # elimina los espacios adicionales de la URL
        print('\nDescargando ' + nombre_archivo) 
        wget.download(url_completa) # descarga el archivo usando wget
    

    En este fragmento de código, utilizamos el método replace() para reemplazar los espacios adicionales por %20, que es la representación URL-codificada de un espacio. Esto debería solucionar el problema con el error de unknown url type.

Comments are closed.