gifts2017

Загрузка изображений с Google.Картинки и Яндекс.Картинки (обычные формы)

Опубликовал Дмитрий Т (Dmitriy_T) в раздел Обработки - Универсальные обработки

Поиск картинок на Google и Яндекс.

Использование:

1) Открывается в режиме 1С:Предприятие меню Файл - Открыть - выбираете файл с обработкой

2) Выбираете в поле "Для кого" элемент справочника Номенклатура, для которого выполняется поиск (из него копируется полное, либо просто Наименование в строку "Что ищем", по которой и происходит поиск)

3) Редактируем строку "Что ищем", если нам нужно уточнить поисковый запрос

4) Отмечаем галочками поисковики. Для Яндекса нужно дополнительно указать время ожидания перед парсингом результата поиска (страница грузится в невидимый элемент формы)

5) Выбираем Размер картинок для поиска

6) Ищем по кнопке с пиктограммой "Вперед" (далее по этой кнопке происходит пролистывание результата - подгрузка следующих картинок)

7) Тыцаем мышью в понравившуюся картинку - она отобразится справа в поле ВЫБРАННОЕ ИЗОБРАЖЕНИЕ

8) Нажимаем Установить напротив выбранной Номенклатуры - вот тут по идее должна бы установиться картинка для элемента справочника, но это уже реализуете своими силами. Не получится - обращайтесь. 


Для Яндекса реализовано "на троечку" через АктивХ элемент формы WebBrowser. Реализовать через HTTPСоединение и HTTPЗапрос как с Гуглом не вышло (отбиваются они и банят IP за автозапросы). А так хоть и со скрипом (требуется время для ожидания полной загрузки страницы), но работает. Кому хватает Гугла - смело выключаем Яндекс и пользуемся.

Будут предложения как можно улучшить или конструктивная критика - пишите, буду только рад.

Еще раз. Установку картинки для конкретного элемента конкретного справочника конкретной конфигурации придется допиливать самостоятельно.

P.s. Про аналоги - знаю, видел. Это делал сам для разминки мозгов. Кому-то пригодится - уже хорошо.


04,05,2016 Заменил файл на новую версию (вернул загрузку с Гугла)

Скачать файлы

Наименование Файл Версия Размер
Поисковик картиночный 20
.epf 27,34Kb
04.05.16
20
.epf 27,34Kb Скачать

См. также

PowerTools от 1 000
Подписаться Добавить вознаграждение
Комментарии
1. Максим *** (premier) 09.03.16 16:09
(0) Как можно улучшить функционал, не используя API поисковиков, а также временно "спрятать" свой забаненный IP за прокси-сервер можно посмотреть в этой обработке.
P.S. Доступно только в полных версиях обработок.
2. Дмитрий Т (Dmitriy_T) 09.03.16 17:19
(1) premier, Тратиться на вашу обработку - спасибо, перебьюсь. Есть предложения по улучшению - пишите в комменты открытым кодом, а проталкивать тут свою обработку, имхо, моветон.
Также создалось устойчивое впечатление, что обработку вы не качали ;) Будьте здоровы.
3. Максим *** (premier) 10.03.16 10:25
(2) Dmitriy_T, Размещать в комментах код на 12 страниц - вот это, имхо, моветон покруче, чем "проталкивать свою обработку". Спросили, как улучшить функционал Вашей обработки, я ответил: отказаться от IP поисковиков, добавить возможность посылать запросы через прокси. А ссылка на обработку приведена не для скачивания, а для ознакомления. Текст публикации и комментарии содержат, по моему мнению, ответы на вопросы по улучшению Вашей обработки.
Также создалось устойчивое впечатление, что обработку вы не качали
Нет, не качал - она мне ни к чему ;) И Вам не хворать.
4. Дмитрий Т (Dmitriy_T) 10.03.16 11:24
(3) premier, Будет интересно почитать 12 страниц кода, обязательно скачаю вашу обработку, тут их выкладывать не надо. А по существу, мне был бы интересен пример получения данных конкретно от Яндекса (любых данных) стандартными средствами (доступными простому обывателю, т.е. API-яндекса не предлагать), ну или хотя бы через общедоступную стороннюю компоненту, хочу уйти от использования АктивХ.
Запросы через прокси это конечно тоже полезно, но сомневаюсь, что в данном случае они сработают. Не прав, очень прошу - убедите в обратном. Думаю, для этого не потребуется аж 12 страниц кода, хватит наверняка 12 строк?! :)
5. Максим *** (premier) 10.03.16 13:12
(4) Dmitriy_T, Попытаюсь кратко осветить мою технологию поиска на Yandex.
Сначала я получаю ответ сервера GET запросом с URL https://yandex.ru/images/search?text=ВЫРАЖЕНИЕ_ПОИСКА&stype=image.
Затем через встроенный объект 1С ПостроительDOM создаю объект ДокументHTML.
После нормализации документа с ним можно работать как с DOM документом.
На полученной странице меня заинтересовали элементы <div> с классом, содержащим класс "serp-item".
Правда не все, а подходящие под условие регулярного выражения "serp-item serp-item_type_search serp-item_group_search serp-item_pos_\d+ serp-item_theme_dark serp-item_series_no justifier__item i-bem".
Затем я получаю фрагмент кода из атрибута "data-bem" элемента <div>, прошедшего проверку. Этот фрагмент определённым образом анализируется и, если содержит ссылку на изображение, загружается изображение по полученной ссылке.
Вот, в общем, такой замысловатый алгоритм получился... Зато без использования API.
Стороннюю компоненту "VBScript.RegExp" всё же пришлось использовать, потому как без регулярных выражений средствами одного только встроенного языка 1С довольно-таки затруднительно анализировать фрагменты текста (компонента, кстати, входит в дистрибутив поставки Windows и для её использования никаких расширенных прав пользователю не потребуется).

По поводу прокси. Запросы через прокси отлично отрабатываются, а поскольку Yandex - не любитель автоматических запросов, частенько "банит" IP, с которого они приходят. И я уже не раз использовал соединение через прокси, чтобы скрыть свой IP. Ненадолго, правда, но прокси серверов достаточно много и, если уж хочется работать именно с Yandex адреса прокси просто можно менять после некоторого количества запросов, например.
Ну и конечно, если обработка будет иметь возможность работы с несколькими поисковыми серверами, только добавит ей гибкости.
6. Дмитрий Т (Dmitriy_T) 10.03.16 14:28
(5) premier, Хм. Вроде все то же самое делаю (ну только без RegExp). Для Гугла прокатывает без проблем (ну может я его настолько не задолбал еще запросами, чтоб он меня банил), а вот Яндекс с лету меня шлет подальше (на этапе GET запроса). Если прокси это вылечит, тогда большое вам гранд мерси:) Я правильно понял - прокси нужно засунуть в параметры HTTPСоединения, чтобы вышло как-то так:
...
Прокси = Новый ИнтернетПрокси;
Прокси.Установить("https", <IP_Proxy>, <Port_Proxy>);  
СоединенияЯндекс = Новый HTTPСоединение("yandex.ru",,,,Прокси,,Новый ЗащищенноеСоединениеOpenSSL);
...
HTTPЗапрос = Новый HTTPЗапрос();
ЗаголовкиЗапроса = Новый Соответствие;
ЗаголовкиЗапроса.Вставить("User-Agent",ЮзерАгент);
HTTPЗапрос.Заголовки = ЗаголовкиЗапроса;
HTTPЗапрос.АдресРесурса = "/images/search?text="+<ИскомаяКартинка>;
ОтветHTTP = СоединенияЯндекс .Получить(HTTPЗапрос);
Тело = ОтветHTTP.ПолучитьТелоКакСтроку();
НовыйЧтение = Новый ЧтениеHTML;
НовыйЧтение.УстановитьСтроку(Тело);
ПостроительDOM = Новый ПостроительDOM;
ДокументHTML = ПостроительDOM.Прочитать(НовыйЧтение);
...
...Показать Скрыть

7. Максим *** (premier) 10.03.16 16:29
(6) Dmitriy_T, да, примерно так. Меня сегодня трижды "банили". Через прокси тоже "банят", если сервер посчитает, что запросы идут слишком часто, но бесплатных прокси серверов множество. Так что для Yandex'a при редиректе на другую страницу можно смело из списка выбирать другой прокси, т.к. не раз замечал, что после "бана" Yandex производит редирект на страницу с капчой.
8. Дмитрий Т (Dmitriy_T) 11.03.16 13:37
(7) premier, Как-то все равно не работает у меня. Делаю так:
1) Получаю пачку проксей с HideMe.Ru
2) Потом по этим проксям пробегаюсь и пробую создать HTTPСоединение и запросить заголовки по конкретному запросу в ожидании кода 200
	Для Каждого ТекПрокси Из ТабПроксей Цикл
		Прокси = Новый ИнтернетПрокси;
		Прокси.Установить("https",ТекПрокси.IP,ТекПрокси.Port);
		Соединение = Новый HTTPСоединение(АдресСервера, , , , Прокси,4,Новый ЗащищенноеСоединениеOpenSSL);
...
		HTTPЗапрос.АдресРесурса = ТекстЗапроса;
		Попытка ОтветHTTP = Соединение.ПолучитьЗаголовки(HTTPЗапрос); Исключение Сообщить(ОписаниеОшибки()); Продолжить; КонецПопытки;
		Если ОтветHTTP.КодСостояния=200 Тогда
...
...Показать Скрыть

3) Иногда (гораздо реже чем хотелось бы) мне это удается. Далее делаю полноценный запрос через найденный подходящий прокси. Как правило возвращается нормальный ответ (из которого можно выковырять нужные данные)
4) Тут самое интересное. Делаю другой/такой же (без разницы) запрос к этому же соединению (через тот же прокси) спустя некоторое время - получаю от Яндекса редирект на КАПЧУ в 98% случаев.

Т.е. получается - получил, проверил, а работать дальше не могу - надо искать заново и так до поседения.. Что делаю не так?

После того как написал, напоролся на прокси, который пару раз таки отработал. Возникло подозрение, что у меня какие-то не такие прокси. Подскажите, плиз, где взять "правильные"?
9. Максим *** (premier) 12.03.16 15:26
(8) Dmitriy_T, а я же писал в (7), что "банят" и через прокси. Особенно, как я заметил, европейские (чаще всего российские). Хотя, Yandex'у, мне, кажется, всё равно, какой прокси используется. Скорее всего, измеряется частота запросов и интервал между их повторениями. Я для примера протестировал несколько прокси-серверов из того же списка, что и Вы указали. Чем меньше скорость отклика прокси-сервера, тем больше вероятность "бана". И вообще, создается впечатление, что список прокси с сайта http://hideme.ru/proxy-list уже внесен в "черный" список Yandex. Хотя, если хоть один запрос "прокатывает", можно просто случайным методом подставлять прокси для каждого запроса. Или взять список прокси с другого сайта, хотя, вероятность дублирования серверов достаточно велика. Что интересно, Yandex и Rambler при поиске выдают примерно одинаковые результаты. Похоже, что поисковый движок один и тот же используется (из 10 полученных изображений - 9 похожи как близнецы). Поэтому, как вариант обхода ситуации с Yandex, я, например, включил в список поисковых серверов ещё и Rambler. С него ни одного "бана" ущё не получил.
10. Максим *** (premier) 12.03.16 15:50
(8) Dmitriy_T, 2) Потом по этим проксям пробегаюсь и пробую создать HTTPСоединение и запросить заголовки по конкретному запросу в ожидании кода 200 .
Кстати, я бы не стал ограничиваться ожиданием заголовка со статусом 200 в ответе сервера. См. эдесь. Другие заголовки, чьи статусы меньше 300, часто носят информативный характер, но ответ на запрос всё же возвращают.
11. Дмитрий Т (Dmitriy_T) 12.03.16 16:47
(10) premier, Картинки - это ж баловство на самом деле. Интересен в частности Маркет, а его на Рамблере не найдешь. Пока вариантов кроме АктивХ элемент браузера на форме у меня нет, но это ж как-то некрасиво что ли)) Про коды кроме 200 - спасибо, просветился.
12. Максим *** (premier) 12.03.16 18:51
(11) Dmitriy_T, картинки - это, конечно же, не баловство. Я думаю, есть масса пользователей, которым "влом" выдёргивать картинки из интернета вручную и вставлять в 1С. Поэтому, считаю, что автоматизация такого рутинного процесса необходима многим. Да и в анонсе Вашей публикации явно указано "Загрузка изображений с Google.Картинки и Яндекс.Картинки". Всё же КАРТИНКИ!
Маркет - тема совсем другой публикации. Но, как правило, "маркет" (я так думаю, это - Интернет-магазин), точнее сайты, предоставляющие такой сервис, требуют от пользователя интерактивных действий, т.е. данные загружаются в динамическом режиме и анализировать содержимое контента такого сайта зачастую бывает просто невозможно без API, участия пользователя, использования встроенного (или стороннего web-browsera) и т.д. Автоматизация в этом случае = 0. Может, я и ошибаюсь.
P.S. Во многих публикациях замечал, что они закрывались потому, что предложенные в них обработки использовали API поисковых систем, которые производители объявляли как "deprecated", т.е. устаревшими и более не поддерживаемыми.
13. Артем Чертищев (avtax) 18.05.16 00:48
Большое человеческое спасибо за обработку
14. Илья Фамилия (Murom) 10.08.16 11:14
Скачал эту обработку и другую обработку автора, который тут тоже отписывался.
Эта обработка работает. Картинки сканирует. Автору однозначно спасибо за работу!!!
В чем плюс по сравнению с другой обработкой, которая тут обсуждалась (не хочу писать название, чтоб не сочли за рекламу), так это в кнопочке "->" - типа найти следующие. Так же обработка находит картинки на google с возможностью выбора разного размера.
Но у меня перестала искать товары на яндексе. Может меня просто забанили.

Себе в работу взял все-таки другую обработку, но вставил туда загрузку картинок из google из этой обработки.