Парсер номеров телефонов с сайтов. Определение мобильных.

specialist

Client
Регистрация
28.12.2018
Сообщения
690
Благодарностей
280
Баллы
63
Основная сложность в сборе номеров телефонов состоит в том, что единого формата никто не придерживается, к тому же в каждой стране свои правила и номерные ёмкости.

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

Для решения этой проблемы Google разработал свою библиотеку libphonenumber.
В ZennoPoster используем порт данной библиотеки на C#.

Для каких целей используются:
  • Сообщения на телефоны и мессенджеры (WhatsApp, Viber, Telegramm)
  • CRM системы (подробнее о клиенте)
  • Базы для "холодных" звонков

Логика работы шаблона:
  1. Ищет страницы с контактами на сайте и переходит по ним
  2. Извлекает номера телефонов
  3. Проверяет на валидность
  4. Распределяет в две категории: мобильные и стационарные
phone_project_maps.PNG


Для работы шаблона требуется библиотека PhoneNumbers.dll, скопируйте из папки ExternalAssemblies в аналогичную папку ZennoPoster (пример пути: C:\Program Files\ZennoLab\RU\ZennoPoster Standard\5.28.0.0\Progs\ExternalAssemblies)

Входные данные шаблона:
  • В файл urls_list_utf8.txt добавить список url для проверки. Кодировка - обязательно utf8.
  • В общем коде прописаны двухзначный код страны "RU", если сбор будет под другую страну, прописать нужный код.
2countrycode.PNG
  • Если нужно искать страницы на других языках, отличных от русского, необходимо добавить в javascript код нужные страницы для поиска.

Результат:
На выходе получаем CSV файл, в следующем формате: разделитель ";", номера телефонов разделены между собой ",".
Столбцы (4): ссылка, главная страница, мобильные телефоны, стационарные телефоны.

  1. Браузерная версия. Некоторые сайты автоматически подставляют номера телефонов или не показывают без javascript.
  2. Поиск ссылок на javascript. Было готовое решение
  3. Встроенный json. Его достаточно в данном проекте
  4. Дублирование кода. В данном случае для наглядности, если слить в кучу, разобраться будет гораздо сложнее.

Недостатки:
  1. В файле примере urls_list_utf8.txt последние 2 ссылки, сайты на парковке. Как результат, вместо ожидаемых, у нас телефоны регистратора. Возможное решение проблемы: черный список телефонов или проверка заголовков страницы.
  2. Если на странице будут данные похожие на телефон, они будут телефоном, например, артикулы товаров. К счастью, это редкость.
  3. Дубликаты url. Данные берутся построчно, на дубли не проверяются.
Дополнительные возможности:
Добавить к данному парсеру, сбор других данных достаточно просто, т.к. это браузерная версия.
 

Вложения

Для запуска проектов требуется программа ZennoPoster.
Это основное приложение, предназначенное для выполнения автоматизированных шаблонов действий (ботов).
Подробнее...

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

PrivetMoney

Client
Регистрация
08.04.2016
Сообщения
8
Благодарностей
0
Баллы
1
У меня ошибку выдает. Сделал всё по инструкции.
Добавил библиотеку. UTF8. Домены с http:// и без http://
 

PrivetMoney

Client
Регистрация
08.04.2016
Сообщения
8
Благодарностей
0
Баллы
1
Библиотеку в системную папку зенки добавили? Кодировка там не так важна, если рф доменов нет.
рф домены в 10% случаев встречаются. Библиотеку добавил по указанному адресу
Написано не удалось выполнить проект
 

specialist

Client
Регистрация
28.12.2018
Сообщения
690
Благодарностей
280
Баллы
63
Запустите в project maker, в пошаговом режиме, покажет где останавливается.
По вопросам.
1) Формат url - все что принимает зенопостер, если вставить и нажать перейти, переходит, значит подходит. Это браузерный вариант.
2) Ниже 5.22 я не проверял, на последней версии 5.29.3 работает, специально сейчас скачал с сайта и запустил.
 

specialist

Client
Регистрация
28.12.2018
Сообщения
690
Благодарностей
280
Баллы
63
В шаблоне используется встроенный инструмент обработки JSON.

ZennoPoster 5.10.0.0 (21.09.2016)
Новые фичи:
[+] Обновлен движок браузера до версии 45 ESR.
...
[+] Добавлены инструменты и макросы для работы с JSON и XML.

У вас версия 5.9.9.1
Самый простой вариант, это изменить формат вывода в javascript коде на обычный csv. Или если есть опыт, то переделать на Newtonsoft.Json
 

PrivetMoney

Client
Регистрация
08.04.2016
Сообщения
8
Благодарностей
0
Баллы
1
В шаблоне используется встроенный инструмент обработки JSON.

ZennoPoster 5.10.0.0 (21.09.2016)
Новые фичи:
[+] Обновлен движок браузера до версии 45 ESR.
...
[+] Добавлены инструменты и макросы для работы с JSON и XML.

У вас версия 5.9.9.1
Самый простой вариант, это изменить формат вывода в javascript коде на обычный csv. Или если есть опыт, то переделать на Newtonsoft.Json
Спасибо, ничего не понял. Пойду искать другой вариант, этот не рабочий.
 

specialist

Client
Регистрация
28.12.2018
Сообщения
690
Благодарностей
280
Баллы
63
Пойду искать другой вариант, этот не рабочий.
Это рабочий вариант. Продлите свою лицензию, в вашей нет нужного функционала или возьмите бокс.
В крайнем случае, попросите кого-то переписать ту часть, она сделана как пример удобства использования и возможностей программы.
 

specialist

Client
Регистрация
28.12.2018
Сообщения
690
Благодарностей
280
Баллы
63
Часто задаваемые вопросы:

1) Почему парсит только одну страну?
В каждой стране свои форматы номеров, вариации допустимых диапазонов и способы записи и т.п.
Внутри библиотеки - коллекция регулярок под разные страны, они не универсальны, поэтому не возможно применить одно и тоже к разным странам.

2) Где меняется код страны:
В общем коде, в строке кода указывается 2 буквенный код страны
Код:
phoneNumberUtil.FindNumbers(dom, "RU");
3) Что делать, если нужны несколько стран:
Проходить их в цикле, меняя коды стран.

4) Почему удаляется код страны и номер записывается не в международном формате?
Шаблон создавался для под мои задачи и мне было удобнее использовать внутренний стандарт для записи номера, для приведения к единому виду.
Сама библиотека позволяет использовать 3 стандарта:

Возможные варианты:
Код:
// Produces "+41 44 668 18 00"
PhoneNumberFormat.INTERNATIONAL

// Produces "044 668 18 00"
PhoneNumberFormat.NATIONAL

// Produces "+41446681800"
PhoneNumberFormat.E164
В примере указан национальный формат, измените на нужный вам.
Код:
phoneNumberUtil.Format(item.Number, PhoneNumberFormat.NATIONAL);
 

Ebolla

Новичок
Регистрация
10.11.2019
Сообщения
1
Благодарностей
0
Баллы
1
Доброго ! Возможно ли при помощи вашего парсера спарсить номера телефонов сайта Амазон( для разработчиков мобильных приложений ) ? https://www.amazon.com/mobile-apps/b?ie=UTF8&node=2350149011
Может можно собрать связку из ваших инструментов ? к примеру спарсить почты интиресуещего меня сайта после проверить их на пересечение с ресурсами где указанная почта в паре с номером телефона.
 
Последнее редактирование:

specialist

Client
Регистрация
28.12.2018
Сообщения
690
Благодарностей
280
Баллы
63
парсить номера телефонов сайта Амазон
В данном парсере используется бибилиотека, которая позволяет находить номера телефонов в переданном тексте.
Но так как стран много, то и способов записи много, поэтому необходимо указывать страну.

Поэтому нужно или искать по очереди нужные страны или собирать всё подряд, потом разбираться, что телефон, что нет.
Регулярные выражение тут тоже мало чем помогут.

Если поле с телефоном в определенном месте страницы, то встроенный парсер зенки, вполне справится с задачей.

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

Mikhail B.

Moderator
Регистрация
23.12.2014
Сообщения
8 465
Благодарностей
2 902
Баллы
113
В данном шаблоне есть PhoneNumbers.dll
Вещь реально хорошая для тех случаев, когда телефоны хаотично разбросаны на страницах + еще в разных форматах. Данная DLL круче любой регулярки. Уж поверьте, испытано на деле.
 
  • Спасибо
Реакции: Alex1987

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)