Как находить изображение в сети и добавлять в ячейку Google Таблиц - одной формулой
Рассмотрим задачу, которая относительно легко решается в Google Таблицах одной формулой: найти по названию (в нашем примере - по названию товара) изображение в сети и вывести его в ячейку.
Давайте разберем задачу по шагам и постепенно составим формулу, которая будет ее решать.
Как бы мы поступали, делая это вручную?
- Копируем название товара;
- Вставляем в поиск в Яндекс.Картинках, Google.Images или другой поисковой системе;
- Берем изображение в результатах поиска и либо копируем его, либо ссылку на него - и вставляем в нашу Таблицу.
Все это можно делать с помощью функций.
Начнем с того, что будем искать название товара в поисковике. Сначала получим ссылку на поиск. Вобьем что-нибудь в Яндекс.Картинки - хоть слово "image" - и скопируем ссылку из браузера:
https://yandex.ru/images/search?text=image
Очевидно, нам нужно оставить часть ссылки до знака "равно" включительно. А далее подставлять справа название товара из ячейки (допустим, товар в столбце A):
=ГИПЕРССЫЛКА("https://yandex.ru/images/search?text="&A2)
Функция ГИПЕРССЫЛКА / HYPERLINK превратит текстовое значение, слепленное из начала ссылки и названия товара, в полноценную ссылку, по которой уже можно переходить и попадать на поиск текста из A2 в Яндекс.Картинках:
Уже неплохо! Но нам нужно получить ссылку на изображения, которые хранятся по ссылке, а переходить туда и не нужно. Получить инфо из веб-страницы можно с помощью IMPORTXML - от заголовков нужного уровня до ссылок. В том числе ссылок на изображения. Первый аргумент функции IMPORTXML - ссылка на страницу, второй - запрос XPath. Нам нужен запрос "//img/@src" - он выведет ссылки на все изображения:
=IMPORTXML(ГИПЕРССЫЛКА("https://yandex.ru/images/search?text="&A2);"//img/@src")
Функция IMPORTXML вывела все ссылки на изображения по первому товару. И мы можем теперь воспользоваться функцией IMAGE - напомню, она выводит в ячейке изображение, хранящееся по ссылке:
Но нам все-таки нужно только одно изображение по каждому товару. Поэтому я предлагаю воспользоваться функций ИНДЕКС / INDEX, выводящей из массива нужный элемент по его номеру. Здесь мы возьмем второй элемент выводимого IMPORTXML массива ссылок - видно, что первая ссылка пустая, поэтому так. Будем считать, что самый верхний элемент будет наиболее подходящим. Хотя, конечно, можно выводить и другой или вообще добавить элемент случайности с помощью генератора случайных чисел СЛУЧМЕЖДУ / RANDBETWEEN, но мы пока реализуем вариант попроще.
=IMPORTXML(ГИПЕРССЫЛКА("https://yandex.ru/images/search?text="&A2);"//img/@src");2))
Эта формула будет возвращать ссылку на верхнее изображение со страницы поиска текста из A2 в Яндекс.Картинках. Массив больше не выводится:
Ну все, осталось вместо ссылки сразу выводить изображение, т.е. всю конструкцию поставить в аргумент функции IMAGE:
=IMAGE(ИНДЕКС(IMPORTXML(ГИПЕРССЫЛКА("https://yandex.ru/images/search?text="&A2);"//img/@src");2))
И протянуть ее по всему прайс-листу:
***
Спасибо за материал! Ренат, а не знаете как к изображению привязать ссылку, чтобы при нажатии на картинку открывался другой лист например?
Александр, добрый день!
Просто скопируйте номер листа, на который нужно дать ссылку, из адресной строки браузера, когда будете на этом листе.
Номер вида:
#gid=1962034175
И его используйте как ссылку в функции ГИПЕРССЫЛКА / HYPERLINK.