PicMonster – качаем изображения с фотостоков бесплатно

ibred

Client
Регистрация
04.04.2015
Сообщения
3 835
Реакции
3 564
Баллы
113
Фотостоки – это отличный источник качественных изображений по Вашим запросам. Поиск по ключевым словам на стоках дает куда более приближенный к реальности (к запросу) результат, нежели поиск в Яндекс или Google картинках, за счет обильного количества описательных меток и иного подхода к публикации изображений – все-таки это специализированное место, упор идет на качество.

Средняя стоимость одного изображения колеблется в районе 0.5$. По текущему курсу ЦБ это 33.4 рубля.

Рассмотрим Shutterstock.
Shutterstock_2012_logo.png


Возьмем за основу тариф базовый, 350 изображений в месяц – 199$.
Итого с нас возьмут 0.56$ за одну пикчу.

Люди ежечасно покупают изображения и публикуют их в интернете, так почему бы нам этим и не воспользоваться? :-) Риторический вопрос.

Итак, что же нам потребуется для того, чтобы стрясти со стоков немного халявы:
1. Парсинг миниатюр;
2. Поиск по изображению;
3. Получение ссылки на оригинал без водяных знаков в случае успеха.

Заходим на shutterstock.com и вбиваем в поисковую строку наш запрос, пусть это будет couple (пара). На выходе у нас будет ссылка:

Код:
Развернуть Свернуть Копировать
http://www.shutterstock.com/cat.mhtml?autocomplete_id=&language=ru&lang=ru&search_source=&safesearch=1&version=llv1&searchterm={-Variable.searchImage-}&media_type=images&media_type2=images&searchtermx=&photographer_name=&people_gender=&people_age=&people_ethnicity=&people_number=&color=
Где {-Variable.searchImage-} наш поисковый запрос.
2016-05-20_18-08-13.png


Отлично, у нас 1 492 807 результатов.

Теперь необходимо получить прямые ссылки на миниатюры, размер которых колеблется в районе 400px по ширине. Опытным путем определяем, что все стоковые изображения загружены на поддомен thumb*.shutterstock.com. Готовим регулярку:
Код:
Развернуть Свернуть Копировать
(?<=img\ src=")http://thumb[^"]+(?="[^>]+)
Складываем все это добро в список и при необходимости переходим на следующую страницу и повторяем операцию. Чтобы нам не уйти в бесконечный цикл, установим максимум, за который будет отвечать переменая parsing_img_count во входных настройках.

Добавим немного обработок, проверок, любви и 1 из 2 логических блоков готов.
2016-05-20_18-18-33.png


Первая часть работает на GET запросах, а вот 2-ой этап, к сожалению, пришлось реализовать на браузере т.к. иначе мне просто не хватило бы времени для завершения статьи в рамках конкурса, может быть чуть позже выложу обновленную версию, работающую без использования браузера.

Собрали тестовый список на 100 изображений.

Теперь необходимо его прочекать. Отправляемся в Google, переходим в раздел «Картинки», далее щелкаем по иконке фотоаппарата, которая отвечает за функционал поиска по картинке и указываем ссылку на изображение из списка.
2016-05-20_18-23-29.png


Как только мы совершим запрос, нас будет интересовать самый первый блок, в частности ссылка, указывающая на размер изображения «Большие».

Если нам встречается нечто подобное этому:
2016-05-20_18-27-11.png


Или сообщение о том, что ничего не найдено – проходим мимо, это не наш клиент!

А вот пример ниже нам подходит идеально:
2016-05-20_18-39-17.png


Переходим по ссылке «Большие» и забираем самое первое изображение. Можно сделать алгоритм по-хитрее, но для примера сойдет и так :-) Чтобы получить полный URL на изображение, необходимо было нажать на кнопку «Открыть в полном размере», но она оказалась «геморойной» по части единственно-определяющего её признака, поэтому я просто вытащил его из кода страницы регуляркой:

Код:
Развернуть Свернуть Копировать
(?<=ou":")[^"]+
Поздравляю с экономией! :-) Кладем сие добро в список и продолжаем гонять сей процесс в цикле, пока лист не опустеет.
2016-05-20_08-11-45.png


За несколько минут работы на 1IP с минимальными таймаутами 1-2 секунды было найдено 23 изображения из 100 возможных. Это 23%.
2016-05-21_20-25-51.png


А наша экономия составила 11.5$.

Для больших объемов нужно будет подкрутить таймауты, анти-каптчу и прокси, иначе Google нас завалит проверками.

У нас на выходе получился файл good.txt со ссылками на найденные оригиналы изображений без водяных знаков фотостока. Теперь необходимо выбрать подходящие и скачать, но не щелкать же так каждую ссылку – р-у-у-у-у-у-у-у-у-у-тина.

Я предлагаю решить это 2 способами:
  1. Создать галерею, где мы сможем визуально оценить сразу весь материал и сохранить подходящие варианты.
  2. Скачать всё сразу.

Всё это мы будем делать на основе второго мини-шаблона, а в конце статьи будет так же прикреплен шаблон «PicMonsterDownload», в котором всё это будет объединено.

Вариант первый: создаем галерею.
Недолго думая, я остановился на варианте с HTML страничкой и выгрузки ссылок в <img> теги.

Но опять же есть момент, что выставить их плотными рядами будет проблематично в силу того, что они имеют разное разрешение и поэтому всё будет съезжать. Присвоить всем <img> объектам одинаковый width и height мы тоже не можем, иначе некоторые фотографии будут сплющены.
2016-05-21_13-34-58.png

Благо нам не придется ломать голову или изобретать велосипед, ведь есть JS плагин под названием Isotope (isotope.metafizzy.co), который способен фильтровать и сортировать слои волшебным образом, например, так:
2016-05-21_13-31-02.png

То, что нам нужно!

Так-с, знаете, верстать мне сейчас тоже лень. Нужен готовый вариант, который мы немного отредактируем под свои нужды. Где же его найти? Верно, Demo. Заходим в Demos -> Images (на сайте разработчика) и перед нами красота:
2016-05-21_13-42-40.png

Нужно всего лишь убрать левый сайдбар, да текст сверху. Поехали. Сохраняем страницу и включаем режим «верстальщика», если в Вашей черепной коробке такого функционала нет – не переживайте, готовое решение будет в конце статьи, в виде шаблона :-)

Итак, что мы имеем: набор ссылок и слои <div class="photo"><img src="ССЫЛКА” /></div>, которые делают «красиво». Что ж, нам нужно регулярочка!

Отправляем все содержимое файла good.txt в переменную и обрабатываем Regex заменой.

Что искать:
Код:
Развернуть Свернуть Копировать
(https?://[^\s]+)

На что заменить:
Код:
Развернуть Свернуть Копировать
<div class="photo"><img src="$1" /></div>

Сохраняем в переменную OUTPUT.
Теперь все это дело, нужно встроить в нашу страницу и сохранить.
Сохранять будем в файл imagelist_%дата%.html

Но так как у меня не работает {-TimeNow.Date[Format]-} т.к. установлена старая версия ZP, я воспользуюсь C# кодом и сохраню в переменную time:
Код:
Развернуть Свернуть Копировать
return DateTime.Now.ToString("MM.dd.yyyy hh:mm:ss");
2016-05-21_14-22-50.png

Откроем полученный HTMLфайл:
2016-05-21_16-07-37.png

Ляпота :-)

Для того, чтобы сохранить изображение на компьютер достаточно сделать 2 простых телодвижения: правый клик мыши -> сохранить картинку как.

Вариант второй: Качаем всё сразу!
Воспользуемся потрясающей консольной утилитой Wget для загрузки файлов по сети. Поддерживает протоколы HTTP, FTP и HTTPS, а также работу через HTTP прокси-сервер. Если в процессе работы сетевое соединение оборвется, утилита возобновит работу с того места, где она была прервана – это одно из преимуществ. Так же поддерживает закачку по списку в фоновом режиме – супер, то что нам нужно.

Скачать: http://gnuwin32.sourceforge.net/packages/wget.htm Вам нужен «Complete package, except sources»

Я очень скудно описал возможности этой утилиты, но уверяю Вас их огромное количетво. С мануалом можете ознакомиться здесь: http://www.opennet.ru/man.shtml?topic=wget&category=1 или http://www.gnu.org/software/wget/manual/wget.html

Думаю, что ни у кого не возникнет трудностей со скачиванием дистрибутива и прохождением мастера установки.

Далее нам нужно добавить путь Wget’a к системному пути, да бы мы смогли вызвать из командной строки без указания пути к ней. Копируем путь, где установлена программа, у меня это: C:\ProgramFiles (x86)\GnuWin32\bin

Жмем правой кнопкой мыши на «Мой компьютер» -> Свойства -> Дополнительные параметры системы -> Дополнительно. И в этом окошке мы кликаем по кнопке «Переменные среды».
2016-05-21_18-36-36.png

В открывшемся окне выбираем PATHи кликаем на «Изменить».
2016-05-21_18-38-28.png

В строке «Значение переменной» в самом конце ставим «;» (без кавычек) и прописываем путь к утилите wget. У меня это выглядит так:
2016-05-21_18-42-40.png

Подтверждаем свои действия, нажатием кнопки «ОК».

Возвращаемся в ProjectMaker и напишем код для C# кубика, который будем взаимодействовать с утилитой wget:
Код:
Развернуть Свернуть Копировать
var process = new System.Diagnostics.Process {
    StartInfo = new System.Diagnostics.ProcessStartInfo {
     UseShellExecute = false,
     //CreateNoWindow = true,
     RedirectStandardError = true,
     RedirectStandardInput = true,
     RedirectStandardOutput = true,
     FileName = "cmd.exe",
     WorkingDirectory = project.Directory,
     Arguments = @"/c "+project.Variables["command"].Value
     }
};
process.Start();
string output = process.StandardOutput.ReadToEnd();
process.WaitForExit();
process.Close();
process.Dispose();
return output;

В переменной command пишем:
Код:
Развернуть Свернуть Копировать
wget -P img -i good.txt

Так же доступен альтернативный вариант через Свой код -> Запуск программы.
2016-05-21_19-32-00.png

Исполняемый файл: C:\Windows\System32\cmd.exe
Параметры запуска: /c cd {-Project.Directory-} && wget -P img -i good.txt

Время закачки зависит от скорости Вашего соединения и объема данных.

О шаблонах:
PicMonster - шаблон для парсинга оригинальных стоковых изображений без водяных знаков.
PicDownload - шаблон для скачивания изображений и создания галереи.
PicMonsterDownload v1.1- обновленный шаблон, который включает в себя все вышеперечисленные функции.
  • v.1.1 Добавлена проверка стоп-сайтов.
Благодарю за внимание!
 
Номер конкурса статей
  1. Пятый конкурс статей
Тема статьи
  1. Другое

Вложения

Последнее редактирование:
Короче, топик про то, как воровать чужой труд.
 
Короче, топик про то, как воровать чужой труд.
Это смотря из чего исходить, из фактов или моральных соображений.
Фактически фотоматериал находится в свободном доступе, скачать - не своровать, мы же не присваиваем авторство.
Если чисто по человечески, отчасти соглашусь, что тема немного серовата, но цель статьи сугубо образовательный - показать как ZP может взаимодействовать с другими интересными технологиями.
 
  • Спасибо
Реакции: Clover69 и masterLomaster
Отличная статья спасибо. Картинки постоянно требуются.
 
  • Спасибо
Реакции: ibred
Спасибо за статью!
Может у вас завалялся шаблон на поиск одной картинки ? по номеру изображения )
Не хватает только сверки разрешения с тем, что мы могли бы купить на сайте )
 
  • Спасибо
Реакции: ibred
Короче, топик про то, как воровать чужой труд.
имхо большинство zennoposter используют для двух функций:
  1. Постинг
  2. Парсинг
Так что наверное 99% владельцев zennoposter'a "воруют" чужой труд. Мне больше по душе используют цифровую информацию в своих целях. Вообще я противник копирайта и мне нравится "пиратский" подход к распространению информации.
Спасибо. Интересное решение
Полностью поддерживаю. Нестандартный подход к решению конкретной задачи.
 
  • Спасибо
Реакции: ibred
@ibred можете добавить внутрь С# кода для shutterstock сортировку по количеству купленных(или две сортировки: новые и купленные), тогда вероятность нахождения больших изображений выше - и "нагрузка на карман " (прокси капчи) меньше. спс
 
  • Спасибо
Реакции: pix и Konrod_m
Отличная статья спасибо. Картинки постоянно требуются.
Нестандартный подход к решению конкретной задачи.
Спасибо. Интересное решение
Благодарю!
Спасибо за статью!
Может у вас завалялся шаблон на поиск одной картинки ? по номеру изображения )
Не хватает только сверки разрешения с тем, что мы могли бы купить на сайте )
Спасибо за спасибо :)
Такого к сожалению нету, но для одной картинки можно сделать и руками или речь идет все-таки о массовой обработке по номерам?
Разрешение впринципе можно прикрутить, возможно, добавлю в шаблон и перезалью тогда.
@ibred можете добавить внутрь С# кода для shutterstock сортировку по количеству купленных(или две сортировки: новые и купленные), тогда вероятность нахождения больших изображений выше - и "нагрузка на карман " (прокси капчи) меньше. спс
Не нашел на shutterstock'e фильтр по количеству купленных.
Там только новое, популярное (по-умолчанию), релевантное и неизвестное. Ткните пальцем, пожалуйста :)
 
Так-с, немного обновил статью.
Дополнение начинается со слов: "У нас на выходе получился файл good.txt..."
И ещё чуть позже (в течение дня) добавлю второе дополнение, а так же обновлю шаблон.
 
16 результатов - не густо :-)
Учитывая, что речь шла о точечном поиске тематических изображений - торрент не подходит.
И опять же соль статьи была в другом, о чем уже писал в 3-м посте.
Там есть полная база картинок без ватермарка
 
Там есть полная база картинок без ватермарка
Дата этих торрентов варьируется с 2009 по 2014 год, и всего один - 2015 г., да и то они весит 2.97Gb. О какой "полной базе" идет речь? Вопрос риторический ибо продолжать этот спор нет желания, в силу того, что он бессмысленный.
 
Дата этих торрентов варьируется с 2009 по 2014 год, и всего один - 2015 г., да и то они весит 2.97Gb. О какой "полной базе" идет речь? Вопрос риторический ибо продолжать этот спор нет желания, в силу того, что он бессмысленный.
Если поищите хорошо то вполне находятся и более новые дампы и не одним стоком едины.
 
Если поищите хорошо то вполне находятся и более новые дампы и не одним стоком едины.
Уважаемый, поймите, что даже если найти свежий дамп стока - это ж сколько он весить будет? :-)
Одна фотография (качественная) весит порядка 5Mb, связка из 25000 фотографий займет 250Gb, а на одном только shutterstock'e 6 миллионов фотографий по запросу sky. В этих дампах может не быть того, что ищете, да и к тому, же они содержат много лишнего (того, что не требуется, а качать придется). И...
и не одним стоком едины.
Впринципе, описанный мной механизм в данной статьей можно применить не только в отношении фотостоков ;-) Поэтому давайте не будем зацикливаться.
 
Уважаемый, поймите, что даже если найти свежий дамп стока - это ж сколько он весить будет? :-)
Одна фотография (качественная) весит порядка 5Mb, связка из 25000 фотографий займет 250Gb, а на одном только shutterstock'e 6 миллионов фотографий по запросу sky. В этих дампах может не быть того, что ищете, да и к тому, же они содержат много лишнего (того, что не требуется, а качать придется). И...

Впринципе, описанный мной механизм в данной статьей можно применить не только в отношении фотостоков ;-) Поэтому давайте не будем зацикливаться.
Вам же не нужно качать все разделы можно вполне скачать 1 нужный вашей тематики.
 
Обновил статью!
Дописал текст для подраздела "Вариант второй: Качаем всё сразу!".
 
  • Спасибо
Реакции: deninsto
Тема нужная, спасибо. Картинки постоянно требуются и именно тематические, в хорошем качестве и без всяких надписей и водяных знаков.
Так-то обычно через поиск находишь или через порталы типа allday.com, но там приходится качать всю пачку, притом через файлообменники с их ограничениями и рекламой, так что нужно попробовать этот метод.
 
  • Спасибо
Реакции: ibred
Итак-с, добавил последние коррективы в статью и загрузил 2 новых шаблона.
Тема нужная, спасибо. Картинки постоянно требуются и именно тематические, в хорошем качестве и без всяких надписей и водяных знаков.
Так-то обычно через поиск находишь или через порталы типа allday.com, но там приходится качать всю пачку, притом через файлообменники с их ограничениями и рекламой, так что нужно попробовать этот метод.
Спасибо за отзыв! :)
 
Благодарю!

Спасибо за спасибо :-)
Такого к сожалению нету, но для одной картинки можно сделать и руками или речь идет все-таки о массовой обработке по номерам?

Угу, по номерам было бы вообще идеально ) выбрал нужные и ищешь 1 или 10 фоточек )
 
:bw:сильно удивился не обнаружив такого фильтра... Все-таки ресурс продающий, но наверное им виднее)
Впринципе фильтр популярное косвенно отвечает за продажи.
Так же частенько попадаются фотографии средних размеров ~1000px по ширине, без водяных знаков, но и в тоже время там много мусора - криво кропнутые, обработанные, с наложенным текстом. Если сообразить, как этот хлам отсеять, то можно настроить парсинг и на "Средних" размеров изображения.
Угу, по номерам было бы вообще идеально ) выбрал нужные и ищешь 1 или 10 фоточек )
Реализовать это не сложно, так что сделаю :-)
 
Последнее редактирование:
  • Спасибо
Реакции: Konrod_m
Впринципе фильтр популярное косвенно отвечает за продажи.
Так же частенько попадаются фотографии средних размеров ~1000px по ширине, без водяных знаков, но и в тоже время там много мусора - криво кропнутые, обработанные, с наложенным текстом. Если сообразить, как этот хлам отсеять, то можно настроить парсинг и на "Средних" размеров изображения.

Реализовать это не сложно, так что сделаю :-)
А шаблон находит всегда максимальное разрешение ( максимально возможное из предлагаемых на стоке ) ?
Нужно как то понимать что тебе нашло ) без использования других программ )
 
Как - то у меня ... дважды запускал ... попадаются и с водяными знаками часто ... галерею не захотел создать шаблон
069308f3-e4e8-4148-bf3d-ec3ba25b5ecb
 
Короче, топик про то, как воровать чужой труд.
"Тихо спиздил и ушёл - называется нашёл!" ©
Интересно, зачем моралистам Zenno?
Прикидывается браузером, а сам - не-е...
Сплошной обман!
 
  • Спасибо
Реакции: in-touch
@ibred можете добавить внутрь С# кода для shutterstock сортировку по количеству купленных(или две сортировки: новые и купленные), тогда вероятность нахождения больших изображений выше - и "нагрузка на карман " (прокси капчи) меньше. спс
Отличная идея!
 
А шаблон находит всегда максимальное разрешение ( максимально возможное из предлагаемых на стоке ) ?
Нужно как то понимать что тебе нашло ) без использования других программ )
Код:
Развернуть Свернуть Копировать
Переходим по ссылке «Большие» и забираем самое первое изображение. Можно сделать алгоритм по-хитрее, но для примера сойдет и так :-)
Интересная статья! Зачот!
Благодарю!

Как - то у меня ... дважды запускал ... попадаются и с водяными знаками часто ... галерею не захотел создать шаблон
069308f3-e4e8-4148-bf3d-ec3ba25b5ecb
Извиняюсь, оказывается коррективы, что я вносил в шаблон не сохранились.
Прикрепил к посту обновленные версии, сам проверил - все работает, проверьте и Вы :-)
* Исправил ошибку с сохранением галереи и стоп-сайтами (теперь с водяными знаками не должны попадаться).

Код:
Развернуть Свернуть Копировать
О шаблонах:
PicMonster - шаблон для парсинга оригинальных стоковых изображений без водяных знаков.
PicDownload - шаблон для скачивания изображений и создания галереи.
PicMonsterDownload v1.1 - обновленный шаблон, который включает в себя все вышеперечисленные функции.
 

Вложения

  • Спасибо
Реакции: AlexGoodWeb и Fantomass
Голосование началось.
Кому понравилась данная статья, идея, подход или он извлек что-то полезное для себя после прочтения - проголосуйте за неё, Вам не сложно, а мне приятно :-)

Так же у меня есть вторая статья, если кто-то не видел: Пакетная обработка файлов: Поиск и замена, архивация
 
  • Спасибо
Реакции: AlexGoodWeb и Sz5

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)