CHAOS
Пункт 2. total = len(matches). По старой привычке - это некий кэш. В Python в таких вещах нет необходимости?
Не только в Python. Если переменная не нужна, то можно вызов ставить туда, где он нужен. по-моему достаточно наглядно. Если бы это len(matches) использовалось бы еще где-нибудь, тогда правильнее было бы сохранить его результат в переменной.
5. Какая разница в наличии скобок? Кортеж - он и есть кортеж.
Если работает и без них, то зачем их употреблять тогда? Впрочем это дело вкуса. Мне больше нравится без скобок. a, b = bla() создает иллюзию возврата двух значений, и это хорошо. Если еще и в функции стоит return a, b без скобок, то выглядит как-то эстетичнее на мой взгляд. Зачем мне показывать, что это кортеж, если мне нужны 2 значения?
Продолжим.
1. Вместо options я бы передал в download dir. Это единственное, что там используется, а с dir будет выглядеть понятнее.
2. OPTIONS, ARGS = get_options() - большие буквы выглядят пугающе. Я бы убрал это в отдельный вызов main, как здесь автор языка советует:
http://www.artima.com/weblogs/viewpost.jsp?thread=48293. Распараллелить загрузку было бы неплохо. Будет работать в разы быстрее. Узкое место в этой и подобных программах - вытаскивание из интернета. Обычно такие вещи делают многопоточными.
4. Наличие рядом print и write сбивает с толку. Используйте print везде - будет читабельнее.
5. Используйте with urlopen(url) as … разу уж перешли на Python3.
6. Первый url_parsed я бы выкинул: netloc = url_parse(url).netloc по-моему выглядит лучше, да и меньше путаницы с использованием url_parsed в двух местах. Во втором, кстати, тоже без нее можно обойтись, хотя это уже дело вкуса. Без нее конструкция будет подлиннее, не всем это понравится.
7. В случае ‘imageshack’ not in netloc and ‘imagevenue’ not in netloc урл останется без изменений. Это так задумано или просто этот вариант не обрабатывается? чтобы таких вопросов не возникало можно как-то более явно это сделать или хотя бы откомментировать.
8. urlretrive по идее должен генерить исключение, если что-то пошло не так. А у вас в коде успешность операции проверяется по наличию файла. Почему так?
9. желательно, чтобы программа возвращала код возврата 0, если все хорошо и не 0, если что-то пошло не так.
Исправите - приходите еще, если не надоело.