boyle.matt
boyle.matt

Reputation: 191

urlretrieve hangs when downloading file

I have a very simple script that uses urllib to retrieve a zip file and place it on my desktop. The zip file is only a couple MB in size and doesn't take long to download. However, the script doesn't seem to finish, it just hangs. Is there a way to forcibly close the urlretrieve?...or a better solution?

The URL is to a public ftp size. Is the ftp perhaps the cause?

I'm using python 2.7.8.

url = r'ftp://ftp.ngs.noaa.gov/pub/DS_ARCHIVE/ShapeFiles/IA.ZIP'
zip_path = r'C:\Users\***\Desktop\ngs.zip'

urllib.urlretrieve(url, zip_path)

Thanks in advance!

---Edit---

Was able to use ftplib to accomplish the task...

import os
from ftplib import FTP
import zipfile

ftp_site = 'ftp.ngs.noaa.gov'
ftp_file = 'IA.ZIP'
download_folder = '//folder to place file'
download_file = 'name of file'
download_path = os.path.join(download_folder, download_file)

# Download file from ftp
ftp = FTP(ftp_site)
ftp.login()
ftp.cwd('pub/DS_ARCHIVE/ShapeFiles') #change directory
ftp.retrlines('LIST') #show me the files located in directory
download = open(download_path, 'wb')
ftp.retrbinary('RETR ' + ftp_file, download.write)
ftp.quit()
download.close()

# Unzip if .zip file is downloaded
with zipfile.ZipFile(download_path, "r") as z:
    z.extractall(download_folder)

Upvotes: 2

Views: 2766

Answers (2)

Linjie
Linjie

Reputation: 376

urllib has a very bad support for error catching and debugging. urllib2 is a much better choice. The urlretrieve equivalent in urllib2 is:

resp = urllib2.urlopen(im_url)
with open(sav_name, 'wb') as f:
  f.write(resp.read())

And the errors to catch are:

urllib2.URLError, urllib2.HTTPError, httplib.HTTPException

And you can also catch socket.error in case that the network is down.

Upvotes: 3

Eriks Dobelis
Eriks Dobelis

Reputation: 913

You can use python requests library with requests-ftp module. It provides easier API and better processes exceptions. See: https://pypi.python.org/pypi/requests-ftp and http://docs.python-requests.org/en/latest/

Upvotes: 0

Related Questions