Парсинг сайтов в Excel — это когда вы вставляете в столбец список адресов страниц, а надстройка сама скачивает каждую страницу и вытаскивает из неё нужное: цену, наличие, телефон, ссылку на картинку. Без браузера, без ручного копирования и без программирования.
Если нужно просто собрать Title, H1 и Description страниц, читайте статью про парсинг Title, H1 и Description. А здесь речь о произвольных данных со страниц, которые достаются с помощью регулярные выражения.
Что можно спарсить с сайтов в Excel
Типичные задачи, ради которых парсят сайты в таблицу:
- цены и наличие товаров у конкурентов или у себя на сайте;
- стоимость услуг: «от 450 ₽/м²», «выезд мастера 1 000 ₽»;
- контактные данные: телефоны, e-mail, ссылки на мессенджеры;
- картинки товаров: ссылки на фото, а затем и сами изображения прямо в ячейках;
- ассортимент: сколько карточек товаров на странице категории.
Как работает парсинг регулярками в !SEMTools
Процедуры находятся на вкладке !SEMTools: Web (Парсинг, SEO, PPC) → Извлечь → Из URL → «Контент по RegEx-паттерну». В меню три команды:
- «С учетом регистра» — находит в HTML-коде страницы все совпадения с регулярным выражением;
- «Без учета регистра» — то же, но «Цена» и «цена» считаются одним и тем же;
- «Посчитать вхождения» — возвращает не сами совпадения, а их количество.
Порядок работы простой:
- Вставьте в столбец полные адреса страниц, с https://.
- Скопируйте этот столбец рядом: результат запишется на место адресов, а исходный список ещё пригодится.
- Выделите ячейки с адресами, выберите команду и введите регулярное выражение.
- Дождитесь результата: надстройка по очереди скачает каждую страницу и запишет в ячейку найденное.
Если совпадений на странице несколько, они записываются в одну ячейку через три обратных слэша: «12 990\\\9 490». Разнести их по столбцам можно штатно: Данные → Текст по столбцам → С разделителями → «другой»: \ и галочка «Считать последовательные разделители одним».
Три вещи, которые важно знать заранее
- Процедура возвращает совпадение целиком, а не отдельную группу в скобках. Поэтому паттерны строятся так, чтобы совпадение было уже «чистым», а лишнее при необходимости дочищается функциями REGEXEXTRACT и REGEXREPLACE (о них ниже).
- Регулярные выражения работают по правилам движка VBScript: опережающая проверка (?=…) есть, а ретроспективной (?<=…) нет. Символ \s не включает неразрывный пробел, поэтому в ценах его нужно указывать явно: \u00a0 или .
- Парсится исходный HTML-код страницы, тот, что видно по Ctrl+U в браузере. Если данные подгружаются скриптом после загрузки страницы, в коде их не будет, и паттерн ничего не найдёт. Всегда сначала проверяйте, что нужное есть в исходном коде.
Парсинг цен и наличия товаров
Цена в коде страницы обычно выглядит как число с пробелами перед знаком рубля. Этот паттерн забирает её целиком, вместе с обычными и неразрывными пробелами, но без самого знака:
\d+(?:(?:\s| | )\d{3})*(?=\s*(?:₽|руб))
На странице с ценой «12 990 ₽» и старой ценой «15 490 ₽» результат будет «12 990\\\15 490». Чтобы получить чистое число, примените к ячейке функцию REGEXREPLACE: она удалит всё, кроме цифр. Если цен в ячейке несколько, сначала разнесите их по столбцам.
=REGEXREPLACE(B2;"\D";"")
Надёжнее брать цену из микроразметки Schema.org, если она есть на сайте: там цена записана без пробелов и форматирования, а старая цена не мешает.
"price":\s*"?\d+
Наличие ищется по тексту на кнопке или в карточке. Порядок вариантов важен: «нет в наличии» должно стоять раньше «в наличии», иначе найдётся только вторая часть фразы:
[Нн]ет в наличии|[Пп]од заказ|[Вв] наличии
Или по той же микроразметке, где наличие записано однозначно: InStock, OutOfStock, PreOrder:
"availability":\s*"[^"]+"
| Адрес страницы | Цена | Наличие |
|---|---|---|
| https://shop.example.ru/nike-air-max-90/ | 12 990 | В наличии |
| https://shop.example.ru/adidas-samba/ | 9 490 | Нет в наличии |
| https://shop.example.ru/puma-suede/ | 7 990 | Под заказ |
Сбор стоимости услуг с сайтов конкурентов
На сайтах услуг цены редко бывают «голыми» числами: «от 450 ₽/м²», «от 3 500 руб. за шт». Этот паттерн забирает цену вместе с «от» и единицей измерения до ближайшей запятой или точки:
от\s*\d+(?:[\s ]\d{3})*\s*(?:₽|руб)[^,.<]*
А этот — только цены за единицу: за квадратный метр, час или штуку:
\d+(?:[\s ]\d{3})*\s*₽\s*/\s*(?:м²|м2|час|шт)
Так удобно сравнивать прайсы конкурентов: список страниц услуг в одном столбце, цены «от» в другом.
Сбор контактов с сайтов
E-mail на странице:
[\w.+-]+@[\w-]+\.[a-z]{2,}
Телефоны проще всего брать из ссылок tel:, там они записаны без скобок и дефисов:
tel:\+?\d+
Ссылки на WhatsApp и Telegram:
https://(?:wa\.me|t\.me)/[\w.]+
E-mail часто встречается на странице дважды: в ссылке mailto: и в тексте. После разнесения по столбцам повторы легко убрать процедурой удаления повторов слов. И пару слов об этике: собирайте контакты компаний для своей работы, а не для спам-рассылок.
Выгрузка картинок товаров
Главное фото товара почти всегда указано в мета-теге og:image, который сайт отдаёт соцсетям для превью:
<meta property="og:image" content="[^"]+"
Все картинки на странице находятся по тегу img:
<img[^>]+src="[^"]+"
Совпадение вернётся вместе с тегом. Сам адрес из него вытаскивает функция REGEXEXTRACT: она, в отличие от процедуры, возвращает содержимое скобок.
=REGEXEXTRACT(B2;"src=""([^""]+)")
Для og:image замените в формуле src на content. Если адрес начинается со слэша (/img/photo.jpg), допишите перед ним домен процедурой добавления текста в начало ячеек.
А дальше самое приятное. В том же меню «Из URL» есть процедура «Картинки»: выделите столбец со ссылками на изображения, и надстройка вставит сами картинки в соседний столбец, подогнав их под высоту строки. Увеличьте высоту строк заранее — получится наглядный каталог прямо в Excel.
Подсчёт карточек товара на странице (ассортимент)
Чтобы оценить ассортимент конкурента, считайте не сами товары, а повторяющийся элемент карточки. Откройте исходный код страницы категории, найдите класс блока карточки (например, product-card) и посчитайте его командой «Посчитать вхождения»:
class="product-card
Кавычку в конце не ставьте: у карточки бывают дополнительные классы, например «product-card product-card—sale». Если на сайте есть микроразметка, можно считать и её:
"@type":\s*"Product"
Процедура вернёт число для каждой страницы. Так за пару минут видно, в какой категории у конкурента 12 товаров, а в какой 120. Учтите только, что считается первая страница категории: если товары подгружаются кнопкой «Показать ещё» или разбиты на страницы ?page=2, добавьте эти адреса в список отдельно.
| Категория | Карточек на странице |
|---|---|
| https://shop.example.ru/krossovki/ | 48 |
| https://shop.example.ru/kedy/ | 17 |
| https://shop.example.ru/sandalii/ | 6 |
Почему парсинг не находит данные — частые ошибки
- Пустой результат, хотя на странице данные видны. Данные подгружаются скриптом и в исходном коде их нет. Проверьте по Ctrl+U в браузере.
- Цена находится не вся: «990» вместо «12 990». Между цифрами стоит неразрывный пробел или , а паттерн его не учитывает. Используйте паттерн из этой статьи.
- Паттерн «(?<=цена)…» выдаёт ошибку. Ретроспективная проверка в VBScript не поддерживается: ищите совпадение вместе с «якорем», а лишнее убирайте функцией REGEXREPLACE.
- Сайт отвечает ошибкой или пустой страницей на часть запросов. Сработала защита от частых запросов: обрабатывайте список частями, а для проверки доступности страниц используйте процедуру «Коды ответа сервера» из того же меню.
- Исходный список адресов пропал. Результат записывается на место ячеек: копируйте столбец с адресами перед запуском.
Если же нужно открыть страницы и посмотреть на них глазами, пригодится процедура, которая открывает все ссылки в браузере. А чтобы достать адреса из гиперссылок, есть процедура извлечения ссылок из гиперссылок.
Собирайте цены, наличие, контакты и картинки с сотен страниц прямо в Excel: список URL, регулярное выражение — и данные на месте, без браузера и ручного копирования.
!SEMTools решает эту и сотни других задач в пару кликов!
Итоги: что и как парсить в Excel
Надеюсь, на этой странице вы нашли то, что искали, и смогли настроить парсинг сайтов в Excel. Процедура «Контент по RegEx-паттерну» скачивает каждую страницу из списка и вытаскивает всё, что описано регулярным выражением: цены и наличие, стоимость услуг, контакты, картинки. «Посчитать вхождения» помогает оценить ассортимент, а функции REGEXEXTRACT и REGEXREPLACE дочищают результат.
Если с регулярками вы пока на «вы», начните со статьи про регулярные выражения в Excel: там шпаргалка по синтаксису и десятки готовых примеров.