Тестовое задание в одной конторе (не будем называть пальцем):
Напишите скрипт, который будет считывать список 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()
Напишите скрипт, который будет считывать список 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