10

I can do this in c#, and the code is pretty long.

Would be cool if someone can show me how this would be done via python.

Pseudo code is:

url: www.example.com/somefolder/filename1.pdf

1. load file into an array (file contains a url on each line)
2. if file e.g. filename1.pdf doesn't exist, download file

The script can be in the following layout:

/python-downloader/
/python-downloader/dl.py
/python-downloader/urls.txt
/python-downloader/downloaded/filename1.pdf
Blankman
  • 259,732
  • 324
  • 769
  • 1,199

3 Answers3

23

This should do the trick, although I assume that the urls.txt file only contains the url. Not the url: prefix.

import os
import urllib

DOWNLOADS_DIR = '/python-downloader/downloaded'

# For every line in the file
for url in open('urls.txt'):
    # Split on the rightmost / and take everything on the right side of that
    name = url.rsplit('/', 1)[-1]

    # Combine the name and the downloads directory to get the local filename
    filename = os.path.join(DOWNLOADS_DIR, name)

    # Download the file if it does not exist
    if not os.path.isfile(filename):
        urllib.urlretrieve(url, filename)
Grant Paul
  • 5,852
  • 2
  • 33
  • 36
Wolph
  • 78,177
  • 11
  • 137
  • 148
14

Here is a slightly modified version of WoLpH's script for Python 3.3.

#!/usr/bin/python3.3
import os.path
import urllib.request

links = open('links.txt', 'r')
for link in links:
    link = link.strip()
    name = link.rsplit('/', 1)[-1]
    filename = os.path.join('downloads', name)

    if not os.path.isfile(filename):
        print('Downloading: ' + filename)
        try:
            urllib.request.urlretrieve(link, filename)
        except Exception as inst:
            print(inst)
            print('  Encountered unknown error. Continuing.')
Brandon Amos
  • 940
  • 1
  • 9
  • 19
2

It's less code in Python, you could use something like this:

import urllib2
improt os

url="http://.../"
# Translate url into a filename
filename = url.split('/')[-1]

if not os.path.exists(filename)
  outfile = open(filename, "w")
  outfile.write(urllib2.urlopen(url).read())
  outfile.close()
Stephen
  • 47,994
  • 7
  • 61
  • 70