2011/05/18

Скрипт для скачивания содержимого по ссылкам

Тестовое задание в одной конторе (не будем называть пальцем):

Напишите скрипт, который будет считывать список URL из файла (одна строка - один URL), скачивать их не более чем в N потоков и сохранять каждую страницу в отдельный файл. N задается аргументом командной строки и по умолчанию равно 10. Имена результирующих файлов значения
не имеют.

import sys
import threading
import Queue
import urllib2

class DownloadThread(threading.Thread):
    def run(self):
        headers = {'User-Agent' : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0)'}
        while urlsPool.qsize() > 0:
            logfile = open(str(urlsPool.qsize()), 'w')
            req = urllib2.Request(urlsPool.get(), None, headers)
            logfile.write(urllib2.urlopen(req).read())
            logfile.close()

if len(sys.argv) < 2:
    print 'Usage: downloader.py [-n <number>] FILE\n\
"-n <number>" - number of threads (default 10)'
    sys.exit(1)
if len(sys.argv) == 4 and sys.argv[1] == '-n':
    threads = int(sys.argv[2])
else:
    threads = 10
urlsPool = Queue.Queue(0)
for url in open(sys.argv[-1]):
    urlsPool.put(url)
for x in xrange(threads):
    DownloadThread().start()

No comments:

Post a Comment