🚀 Pro-сообщество тут (там есть даже видео про парсинг Яндекс Карт):
https://t.me/iishenka_pro_bot
⭐️ Бесплатные материалы из этого видео тут:
https://t.me/+W1SnvvkcV6A3NWMy
Следующее видео:
https://youtu.be/m_82uNR3uKk
В этом видео я расскажу, как забирать данные о компаниях из Гугл Карт (Google Maps) буквально за несколько промптов.
Что особенного в этом видео?
Мы не только изучим, как работают Скрейперы и Кроулеры для сайтов, но и научимся строить автоматизации на n8n на основе этих знаний.
🔥 Независимо от того, работаете ли вы с AI-агентами или только начинаете осваивать автоматизации в n8n, этот урок поможет вам овладеть процессом настройки ИИ для любых задач.
💡 Не забудьте поставить лайк и подписаться, чтобы не пропустить новые уроки по n8n и AI-агентам. Давайте сделаем AI-автоматизации простыми! 🙌
Я — Илья Бовкунов, основатель и СЕО Sendforsign — это компания, занимающаяся AI-автоматизацией договоров и документооборота. В прошлом был Директором по продукту и продуктовому дизайну в международных AI-стартапах.
Позвать в подкаст или предложить другое сотрудничество aiiszdes@gmail.com
Не забудьте поставить лайк, подписаться и нажать на колокольчик, чтобы не пропустить новые видео об AI-агентах и автоматизациях!
Друзья, всем привет. Ну что, сегодня мы с вами анализируем карты и ищем своих конкурентов на этих картах. Конечно же, анализ карт происходит через скрейперы, да? То есть мы используем какие-то сервисы, которые позволяют нам открывать конкретные локации, забирать оттуда компании, их адреса, веб-сайты, телефоны и прочее, прочее для того, чтобы потом производить с ними какие-то манипуляции. Мы с вами уже когда-то говорили про парсинг интернета, каким образом мы забираем данные из интернета для наших LLM. Поэтому обязательно посмотрите то видео. Я думаю, оно вам тоже очень сильно понравится. Сегодня мы развиваем эту тему и анализируем карты. Мы с вами сегодня изучим несколько базовых шагов. То есть мы с вами научимся собирать данные, ждать, пока исполнится наш запрос, потом очищать и фильтровать данные, после этого даже обогащать данные дополнительной информации и складывать это всё в нашу табличку таким образом, чтобы мы могли получить некоторую сводную информацию по нашим конкурентам, включая их рейтинги или скоры, их веб-сайты, ну и даже какие-то sumри про эти компании. Ну что, такое интересное. Лайк, подписка, коммент, и смотрим обязательно до конца. Вы наверняка уже слышали, что такое скрейперы или кроулеры. То есть, по сути, это инструменты, которые позволяют нам забирать данные с конкретного сайта, обрабатывать их, либо даже искать какие-то внутренние ссылки на этих сайтах и углубляться в их внутренние страницы и забирать данные оттуда тоже. Естественно, для этого есть куча сервисов. И, наверное, один из самых популярных - этой. Соответственно, вам нужно залогиниться по этому адресу. вам выдастся некоторый бесплатный юзаж на 5 долларов. Этого хватит, чтобы поиграться и проверить работоспособность сервисов. И он состоит из огромного количества акторов. То есть это некоторые комбинации, функции, которые созданы для разных задач. То есть тут есть скрейперы для тиктоков, твиттеров, просто для веб-сайтов. И один из самых популярных скреперов на этом сайте - это Google Map Scraper. Мы сегодня научимся с вами им пользоваться и собирать данные для последующей аналитики. Давайте начнём строить нашу автоматизацию. Она будет начинаться с обычного мануального триггера. Я сделаю специально самый простой вариант. Добавлю ноду Edit Fields и пропишу здесь два поля quy и location для того, чтобы их заполнять и прокидывать их в последующие запросы. Допустим, я владелец магазина цветов. Я хочу открыть свой магазин в Москве, в районе Останкино и хочу делать некоторую сводную аналитику по остальным магазинам цветов именно в этом районе. Дальше нам с вами понадобится вернуться в сервис Apifi и посмотреть, каким образом формируется запрос к этому сервису. Здесь мы переключаемся в Jonт этот запрос. Здесь есть три ключевых поля. Это язык, это location query, ну, и сама поисковая строка. Ещё, конечно же, обратите внимание сюда. Это количество результатов, которые будет возвращать это нода. И давайте посмотрим, каким образом инициировать этот запрос и обратиться к самому сервису. Здесь есть кнопочка API и здесь есть кнопка API endpoints. Нам нужно понимать, каким образом организована структура коммуникации с этим сервером. Здесь есть такое понятие, как актор и его запуск. И здесь есть всегда прямой URL, в который уже даже вставлен наш токен уникальный, по которому мы можем инициировать запрос. Соответственно, это есть наш URL. А тело запроса мы уже видели на предыдущей странице. Мы забираем этот URL. Только обратите внимание, когда вы будете уже вставлять в ноду, сюда вставится ваш реальный токе. Так что не ликните его случайно. Соответственно, я добавляю ноду HTTP request и прокидываю тут такие значения. Метод пост. Сюда мы прокидываем как раз тот самый URL, который мы забрали на предыдущей странице. Здесь опять же ваш токен. И дальше отмечаем поле Send Body. И сюда прокидываем то самое тело запроса, которые мы видели в сервисей. Обратите внимание, что наша предыдущая нода уже исполнена, поэтому там есть мои значения query и location, которые я прямо сюда закидываю как location. Язык меняю на RU. И давайте для тестов мы пока будем возвращать 20 запросов. Ну и сама поисковая строка уходит вот сюда. Я только что исполнил этот запрос. И обратите внимание, как выглядит результат его работы. Он нам не возвращает никакие результаты, а возвращает только ID рана. То есть в самом сервисе есть такое понятие, как run, то есть проходка вашего запроса. И чтобы получить реальные результаты, нам понадобится ещё аж целых две HTTP-ноды. Добавляем следующую ноду, которая называется getrun. И здесь, на самом деле, всё проще. Нам нужно будет использовать метод get. И сюда нужно будет прокинуть специальный URL этого рана. Саму айдишку мы забираем из предыдущей ноды, потому что она уникальная для нашего запроса. А вот где брать остальную конфигурацию? Мы возвращаемся в наш сервис Apify, переходим на вкладочку Runs. И здесь видим всю историю наших запросов. Если мы провалимся на неё, то здесь также будет кнопочка API. Мы можем её нажать. И мы здесь как раз увидим метод get run, где будет представлен полный URL этого рана, где уже будет вставлен ID. Соответственно, если мы хотим делать динамический, айдишку мы прокидываем динамически из предыдущей ноды, а всё остальное оставляем как есть. Соответственно, вот наша айдишка. И здесь мы будем ориентироваться на статус. Как только мы выполняем эту ноду, сначала нам будет возвращаться статус, что я ещё работаю. Это будет что-то типа inun или in action или подобное. Поэтому мы с вами организуем
некоторый цикл и будем проверять, если статус у нас sucсиided, то есть это статус, который соответствует выполненному запросу, тогда мы проходим дальше. А вот если какой-то статус, отличающийся от sucсиided, тогда мы делаем ожидание в 5 секунд и возвращаемся на новый круг. Таким образом, это обеспечит нам постоянный опрос нашего рана, когда он закончит свою работу. А вот когда ран выполнен, нам нужно будет получить все данные, которые вернёт этот запрос. Каким образом это делается? Здесь есть ещё один метод, который называется get data Items. И у него тоже есть свой URL, по которому нам нужно будет обратиться. Только сюда уже нужно будет динамически вставить сам ID датасета. Где он берётся? Dataset ID - это тоже динамическая величина. Забираем её из предыдущей ноды. Она у нас есть прямо там. И никакое тело запроса нам не нужно. Обратите внимание, как выглядят результаты. Это уже конечные результаты, которые нам нужны. И здесь есть масса крутой публичной информации: веб-сайты, телефоны, времена работы. То есть всё, что компания предоставляет, когда регистрируется в Google Maps, мы можем получить. И так как мы просили 20 айтемов, 20 айтемов нам и вернулось. Я только что создал себе на Google Драйве пустой Google Sheт и здесь себе сделал прямо две пустых странички. Давайте сначала будем заполнять sheт 2. Я сейчас объясню, зачем. Мы добавляем ноду, которая называется Google Sheets. Здесь выбираем операцию Opend Draw. Прокидываем айдишку нашего Google. Кстати, её очень быстро можно взять прямо из прямого URL этого сшита. Забрали, прокинули сюда и дальше вручную мапим. Для наших демозадач нам понадобится только имя. Соответственно, мы забираем вот прямо title, нам понадобится сам веб-сайт и нам понадобится рейтинг. Если мы, допустим, хотим видеть, как другие пользователи оценивают этот магазин. Давайте выполним эту ноду. И смотрите, вот нам вернулись результаты. Где-то веб-сайты не предоставлены, но самое главное, что если мы вернёмся теперь в Google Sheet, мы увидим, что все эти 20 значений уже заполнены. Прекрасно. Это то, что нам нужно. Давайте вернёмся. Теперь нужно сделать некоторую очистку данных. Очень часто бывает так, что попадают одни и те же магазины, если их, например, представлено несколько в одном районе, и мы хотим избавиться от дубликатов. Я сейчас использую самый простой метод избавления дубликатов. Я буду смотреть на веб-сайт, и если он совпадает, тогда мы будем убирать эти значения. Каким образом это делается? Нам понадобятся нода, которые называется remove duplicates. Вот с такими настройками, что мы смотрим все результаты предыдущей ноды и сравниваем их по веб-сайту. И операция должна быть выбрана remove items repeated within current input. Давайте выполним эту ноду. И мы видим, что у нас осталось уже 12 айтемов из двадцати. Вы, естественно, можете внедрить какие-то другие способы фильтрации или вообще, например, не очищать ваши данные, чтобы использовать весь массив. Это уже зависит от вашего кейса. Теперь мы выполним аналогичную операцию. Мы занесём все уже отфильтрованные данные, но уже вшит один того же самого файла. Давайте выполним эту операцию. Вернёмся в наш Google Sheet, перейдём на sheit One и видим, что вот наши все 12 магазинов здесь уже представлены. Отлично. Дальше очень сильно зависит от вашего кейса. Я, например, хочу сделать так, чтобы информация про эти магазины обогатилась, чтобы, например, я мог их использовать для последующей аналитики, иметь представление о том, что вообще это за магазины. И здесь я уже буду использовать ноду, которая позволяет обогащать нам информацию о какой-то компании или веб-сайте по конкретному URL. А URL у нас уже есть, верно? Мы же его получили на предыдущем шаге. Давайте искать такую ноду, которая называется Tavily. Это комьюнити нода. Себе установите. Либо, если вам не подойдёт, вы можете всегда напрямую пользоваться этим сервисом через HTTP ноду. Вам понадобится вот этот сайт. Здесь понадобится вам засайнапится. И здесь вам будет предоставлена аж 1.000 бесплатных кредитов в месяц, что достаточно даже для небольших уже продуктовых задач. И здесь у вас будет представлен AP ключ, который прямо забираете отсюда. Возвращаетесь в ваш NV CM. Здесь нажимаете добавить новый credential и прямо вот сюда вставляете ваш IP ключ, сохраните ваши криншиалы. Здесь выбираете ресурс search, операция Query. И дальше сделаем очень простой QY. Допустим, найди полную информацию об этой компании и сформируй Summary на русском языке. И так как у нас уже вернулись наши URL, мы прямо вставляем в Expressionш этот URL. И здесь обязательно добавьте опцию, которая называется include answer. Это позволяет нам сделать такую историю, что сначала Тевели ищет какую-то сводную информацию, он может использовать ещё даже сторонний сайт, и не только тот, который мы указали, а потом сам сделает некоторое заключение о том, что же он нашёл. Это работает круто, давайте выполнять. Мы видим, как выполняется эта нода. Кстати, пока выполняется эта нода, я хочу сказать, что я как всегда в конце этого видео выгружу эту автоматизацию и положу в свой бесплатный Telegram-канал. Ссылка на него будет в описании. И если вы интересуетесь, можно ли делать подобное с Яндекс-картами, да, можно. Это требует больше сноровки, это требует полуручного режима, но и тут можно добиваться офигительных результатов, забирая и данные компании, и даже отзывы пользователей для этих компаний. Если вам интересно вот в таком покопаться, то это в нашу про группу. Посмотрите её, там очень круто. Обязательно залетайте. А тем временем наше обогащение выполнилось. Посмотрите, что там Тевили сделал. Прямо такие краткие выжимки
отдал их нам в результате своих ответов. И теперь мы можем этим пользоваться, чтобы обогатить данные, которые у нас уже есть в наших таблицах. Каким образом это делается? Мы добавим ещё одну ноду, точно такую же, только здесь уже будет операция update row. Мы-то знаем, что эти строчки уже есть в наших Google таблицах. Соответственно, при этой операции нам нужно будет выбрать столбец, по которому мы мачимся. Это будет веб-сайт, потому что они уникальные. И, соответственно, мы здесь прописываем такую историю. Вебсайт мы забираем из предыдущей Google Sheetды. Добавляем в эту же строчку. Сам ответа оттавили. Давайте пробовать выполнять. Так, операция выполнена, и мы добавили в столбец description вот такие классные данные. Переходим в наши Google таблицы и смотрим, что вот наш столбец desрипtion. И теперь для каждого нашего магазина есть маленький короткий дерипtionн, который нам нужен. Это, конечно же, автоматизация, которая выполняет довольно простые кейсы, но вы должны понимать, что вы можете, во-первых, кастомизировать сам метод очистки данных. Во-вторых, вы можете забирать намного больше данных из Google Maps. Мы здесь забрали только три поля для демоцелей. Вы забираете больше данных, делайте с ними, что хотите, анализируйте таким образом, каким вам нужно, и пользуйтесь для того, чтобы ваш бизнес чувствовал себя лучше. А на этом всё. Спасибо за внимание. Yeah.