Разработка парсера контактных данных из открытых источников

Контакты поставщиков и клиентов собирают вручную неделями, и к моменту выгрузки часть полей уже устарела. Мы разрабатываем парсер контактных данных под ключ: разбираем ваши источники, настраиваем сбор и отдаём готовый реестр — время на подготовку базы сокращается в разы.

Разработка и обслуживание любых видов сайтов:

Информационные сайты или веб-приложения
Сайты визитки, landing page, корпоративные сайты, онлайн каталоги, квиз, промо-сайты, блоги, новостные ресурсы, информационные порталы, форумы, агрегаторы
Сайты или веб-приложения электронной коммерции
Интернет-магазины, B2B-порталы, маркетплейсы, онлайн-обменники, кэшбэк-сайты, биржи, дропшиппинг-платформы, парсеры товаров
Веб-приложения для управления бизнес-процессами
CRM-системы, ERP-системы, корпоративные порталы, системы управления производством, парсеры информации
Сайты или веб-приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, конструкторы сайтов, порталы предоставления электронных услуг, видеохостинги, тематические порталы

Это лишь некоторые из технических типов сайтов, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента

Услуги, которые мы предлагаем
Показано 1 из 1Все 2062 услуг
Разработка парсера контактных данных из открытых источников
Средний
~3-5 дней
Часто задаваемые вопросы

Почему парсер контактных данных ломается на живых источниках

Живой открытый источник — не статичная страница, а система, которая меняет разметку без предупреждения: переименовали блок, добавили обёртку, вынесли почту в подгружаемый фрагмент. Парсер контактных данных при этом не падает — он возвращает пустые карточки, и обход формально завершается успешно. Ошибку замечают позже, на обзвоне: в реестре не хватает половины адресов, а логи выглядят чистыми.

Дальше начинается нормализация полей. Один и тот же номер приходит как «+7 (900) 000-00-00», «8 900 000 00 00» и «9000000000», почта — с пробелом или заглавными буквами, должность слипается с названием отдела в одну строку. Без явных правил приведения значений дедупликация по совпадению строк не работает, и один человек попадает в базу два-три раза.

Блокировки и лимиты добавляют второй слой отказов. Защита от автоматического обхода режет частые обращения, отдаёт вместо страницы заглушку или проверку и меняет форму ответа при том же адресе. Парсер, который не различает «контактов правда нет» и «нас отсекли на время», продолжает писать в реестр пустые записи — на выходе получается объём, за которым нет данных.

Цена таких отказов считается не в процентах, а в ручных часах: оператор перепроверяет записи, вычищает дубли и дозванивается по нерабочим каналам. Стабильный сбор контактов из открытых источников держится не на одном удачном запросе, а на контроле изменений разметки, явных правилах нормализации и разборе отказов доступа. Дальше разбираем, как это закрывается.

Что даёт аккуратный сбор: скорость, полнота, точность полей

Ручной обход источников упирается в арифметику: на карточку уходит минута-две, за смену набегает несколько сотен записей, и каждую переносят в таблицу руками. Оттуда — опечатки в номерах, разные форматы записи одного телефона и дубли, которые всплывают уже на обзвоне.

Список источников и правила обхода задаются конфигурацией, а страницы разбираются по структуре документа, а не по «примерному» расположению блоков. Если на странице есть разметка schema.org в структурированном виде, контакты забираются из неё напрямую — без эвристик по вёрстке, которые ломаются при первом редизайне.

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

По нашим замерам выигрыш по скорости сбора — восьми-десятикратный: объём, который при ручном обходе растягивается на недели, закрывается за смену. До реестра доходит свыше девяноста процентов карточек, где контакты вообще опубликованы, а ручных правок после импорта остаются единицы процентов — ошибки ввода перестают возникать на входе.

Режимы сбора: разбор разметки, программный интерфейс, выгрузка

Три режима получения данных не заменяют друг друга: на одном наборе источников работает один, на другом — второй. Выбор зависит от того, отдаёт ли источник данные машинно, есть ли у него готовая выгрузка и насколько стабильна разметка его страниц — под каждый набор источников подбирается свой режим.

Ниже — три режима и то, где каждый упирается в потолок.

Режим Когда подходит Ограничения
Разбор разметки Источник не отдаёт данные машинно, но контакты лежат на открытых страницах Ломается при смене вёрстки; нужны свои правила обхода и ограничение частоты обращений на каждый шаблон страницы
Программный интерфейс Источник публикует официальный канал получения данных и открывает к нему доступ Лимиты запросов и суточные квоты, часть полей не отдаётся вовсе, схема ответа меняется со стороны источника
Готовая выгрузка Источник сам публикует файл или архив с контактами Периодичность задаёт источник, форматы и структура разные, выбрать только нужные поля нельзя — разбираем весь объём

На практике набор источников почти всегда смешанный, поэтому режимы комбинируем: где есть программный интерфейс — идём через него, остальное закрываем разбором разметки, а редкие площадки — готовой выгрузкой. Лимиты запросов и правила обхода по каждому источнику держим в отдельной конфигурации, а не в коде: правка при смене вёрстки или квоты не требует пересборки, а статистика по режимам показывает, где просела доля собранных контактов. Когда источник меняет правила игры, режим по нему переключается — остальные продолжают работать без изменений.

Как мы ведём внедрение: от аудита источников до передачи

Внедрение идёт этапами, и каждый заканчивается артефактом, который можно проверить. Проект не превращается в чёрный ящик: видно, откуда приходят данные, по каким правилам собираются и как контролируется качество.

  1. Аудит источников. Сводим площадки в таблицу: объём выдачи, условия использования, наличие открытого программного интерфейса, стабильность вёрстки. Источники без прав на сбор отсеиваем сразу — иначе обход придётся переписывать.
  2. Схема обхода. Очередь запросов с ограничением частоты, обход пагинации, повторные попытки при сбоях. Для страниц с динамической отрисовкой — рендер, для каталогов — обход по спискам разделов и карточек.
  3. Извлечение полей. Контакты достаём по контексту блока, а не по всему тексту страницы: значение из шапки карточки и из рекламного блока — разные сущности.
  4. Нормализация. Телефоны — к единому формату с кодом страны, почты — к нижнему регистру, адреса — к структуре регион/город/улица. Дубли склеиваем по составному ключу.
  5. Проверка на эталонной выборке. Контрольный набор размечаем вручную и сверяем: доля верных значений, доля пропусков, ложные срабатывания. Ниже порога правим правила, а не добираем объём.
  6. Передача в работу. Отдаём код, конфигурации источников, расписание запусков и отчёт по качеству. Показываем вашим инженерам, как подключить новый источник и разобрать сбой.

Дальше — поддержка: регулярные прогоны, оповещения при падении доли валидных записей и обновление правил под изменения вёрстки.

Что остаётся у вас: конфигурации, схемы, регламенты, доступы

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

  • Рабочие конфигурации — правила разбора по каждому источнику, расписание, задержки между запросами, ограничение параллелизма, повторные попытки при сбоях и перечень адресов, с которых идёт обход.
  • Схема источников — карта, где по каждому источнику указаны тип, способ доступа, частота обновления, набор извлекаемых полей и типичные изменения разметки, которые ломают разбор.
  • Права доступа и правовой режим — какие источники открыты для сбора, ограничения по частоте обращений, отдельные учётные записи для сервиса, ключи в защищённом хранилище, а не в коде и не в логах.
  • Модель данных и нормализация — приведение телефонов, почты и адресов к единому виду, правило дедупликации записей, приоритет полей при расхождении данных между источниками.
  • Регламент запуска — работа по расписанию или по требованию, порядок просмотра отчёта о прогоне, действия при блокировке источника и точки эскалации внутри вашей команды.
  • Документация — описание полей и форматов выгрузки, примеры запросов, инструкция по подключению нового источника правкой конфигурации, без изменения кода.
  • Проверки и мониторинг — эталонная выборка с ожидаемым результатом, сигнал при падении доли успешных разборов, журнал изменений конфигураций с возможностью отката.

Дальше сервис живёт по вашему регламенту: обновление правил при изменении разметки, добавление источников, ротация доступов. Если понадобится помощь — подключимся к уже задокументированной системе, а не к чужому коду без описания.

Кейс: реестр по каталогу поставщиков, метрики до и после

Что было и что изменили

У заказчика — каталог поставщиков промышленного оборудования на несколько тысяч позиций, а контакты отделов закупок собирали вручную: два сотрудника обходили сайты и переносили данные в таблицу. На сотню карточек уходил почти рабочий день, при повторном обходе до трети записей оказывались устаревшими, а часть компаний в реестр не попадала вовсе. Полноту никто не измерял — потерянные позиции просто не замечали.

Собрали парсер контактных данных из открытых источников: обход каталога по разделам и извлечение полей из разметки страниц через Schema.org там, где она есть, и по контактным блокам — где её нет. Каждая запись хранит адрес источника и дату сбора, дубли склеиваются по домену и названию компании, спорные совпадения уходят в очередь на ручную проверку. Обход идёт по расписанию, поэтому реестр обновляется, а не собирается заново каждый раз.

Метрики до и после

Полный прогон по каталогу занимает около двух часов против недель ручной выборки, от сотрудников остаётся только проверка отчёта. Полнота реестра выросла с 71% до 96% — разницу показал сверочный прогон по контрольной выборке компаний. Доля дублей упала с 18% до 2%, у 100% записей есть подтверждённый источник, а снижение ручного труда видно по числу правок после каждого обхода.

Где парсер уступает программному интерфейсу и почему?

Программный интерфейс выигрывает там, где он есть и покрывает нужные поля. Источник отдаёт данные в согласованном виде: структура ответа описана, поля подписаны, лимиты обращений известны из документации. Пока это так, разбор разметки — лишний слой, который добавляет только точки отказа.

Разбор разметки надёжнее в обратной ситуации: интерфейса нет вовсе, он закрыт платным тарифом, ограничен по числу обращений или отдаёт урезанный набор полей. Тогда публичные страницы — единственный доступный канал, и данные снимаются оттуда с приведением к своей схеме.

Цена такого решения — зависимость от вёрстки источника. Смена шаблона или редизайн ломают правила разбора, поэтому нужны регулярные проверки, контроль пустых выборок и сигнал о падении доли найденных контактов. Интерфейс ломается предсказуемо — кодом ошибки в ответе, а не тихой потерей данных.

Ограничения источников влияют на выбор не меньше. Капча, блокировка по адресу и по поведению, требование авторизации заставляют вести разбор медленно, с паузами, иначе источник начинает отдавать заглушки. У программного интерфейса те же рамки выражены явно — лимитом обращений в единицу времени.

Поэтому подход выбираем от задачи. Сначала проверяем, есть ли программный интерфейс и закрывает ли он нужные поля; если да — строим на нём. Если нет или он узкий — разбор разметки, но с прослойкой нормализации, чтобы смена источника не рушила весь контур. Чаще всего выходит гибрид: интерфейс даёт основной объём, разбор добирает недостающее.

Технические сомнения: качество полей, блокировки, повторы

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

Откуда берутся дубли и устаревшие записи?

Сравниваем не строку целиком, а нормализованный ключ: телефон приводится к единому виду, домен почты — к нижнему регистру, компания — к каноническому названию. Совпадение по ключу плюс порог похожести названия отправляет запись на слияние, а не в базу. Устаревшие записи не удаляются: у контакта появляется отметка последнего подтверждения, и если он не встречается в источниках за заданный период, помечается как неактуальный — история сохраняется.

Что будет при смене разметки сайта-источника?

Правила извлечения полей вынесены в отдельные конфигурации, поэтому правка занимает часы, а не переписывание парсера. Каждый прогон считает долю распознанных полей — падение ниже порога поднимает сигнал, и об изменении мы узнаём раньше, чем заказчик откроет выгрузку с пустыми колонками. Страницы, которые дорисовываются скриптами, обрабатываются через Playwright.

Как ограничить охват и подтвердить точность?

Охват задаётся списком источников, регионами и тематикой — сбор идёт не по всему интернету. Точность подтверждается контрольной выборкой: часть записей проверяется вручную, и в отчёт попадает доля подтверждённых телефонов и адресов, а не общее число строк.

Обсудим задачу: соберём схему сбора под ваши источники

Чтобы вернуться с оценкой объёма, а не с общими словами, нам нужны вводные по вашей задаче. Ниже — перечень того, что снимает основную неопределённость: с ним мы сразу считаем трудозатраты, выбираем способ сбора и собираем план работ под конкретные источники и состав реестра.

  • Источники: каталоги, площадки объявлений, отраслевые справочники, реестры — и есть ли у вас действующие доступы или подписки на них.
  • Состав реестра: какие поля обязательны (название, контактное лицо, телефон, почта, адрес, сфера деятельности), какие — по возможности.
  • Правила сведения дублей: по какому признаку считаем две записи одной компанией — совпадение телефона, адреса или названия.
  • Объём и периодичность: нужен разовый срез или регулярное обновление, сколько записей ожидаете на выходе.
  • Что уже наработано: прежние выгрузки, таблицы, базы — чтобы не пересобирать то, что работает.
  • Границы допустимого: какие источники и поля вы не берёте по своим внутренним правилам.
  • Что дальше с данными: формат выгрузки, куда складываем, кто и по каким полям ищет.

Пришлите то, что есть, даже в черновом виде, — вернёмся с оценкой объёма, сроками по этапам и понятным планом работ. Если по части пунктов ясности нет, разберём их на обсуждении и зафиксируем договорённости письменно.

Наши компетенции:

Последние работы

  • Разработка сайта компании B2B ADVANCE
    Разработка сайта компании B2B ADVANCE
    1542
  • Разработка веб-приложения для компании FEEDME
    Разработка веб-приложения для компании FEEDME
    1393
  • Разработка веб-сайта для компании БЕЛФИНГРУПП
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    1081
  • Разработка интернет магазина для компании FURNORO
    Разработка интернет магазина для компании FURNORO
    1368
  • Разработка веб-приложения для компании Enviok
    Разработка веб-приложения для компании Enviok
    1139
  • Разработка веб-сайта для компании ФИКСПЕР
    Разработка веб-сайта для компании ФИКСПЕР
    1060