Форум русскоязычного сообщества Ubuntu


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Перечень телефонных номеров сотовых операторов по указанию региона  (Прочитано 871 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн zg_nico

  • Автор темы
  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Здравствуйте, дорогие друзья! Хочу поделиться наработкой (время от времени на форуме всплывают темы по парсированию, - может кому будет полезно)
Предыстория: Увлекаюсь в последнее время python, и недавно поставили передо мной задачу "генерации" списка номеров операторов мобильной связи, которые относятся к определенной области.
Описание: В данном посте предлагаю соответствующее решение, которое представляет собой скрипт на python, выполняющий последовательный парсинг информации с ресурса codificator.ru. Программа работает в два этапа: сперва по заданному пользователем ключевому слову выполняется поиск по странице, на которой выведен перечень префиксов, зарегистрированных для разных операторов, а затем выполняется последовательный перебор найденных префиксов и выписывание соответствующих данных.
Сам скрипт:
(Нажмите, чтобы показать/скрыть)
Принцип работы со скриптом: Для совсем не знакомых с процессом, поясняю: выделяем приведенный исходный код, категорически копируем и вставляем в открытое в фоне окно любимого текстового редактора. Далее сохраняем полученный текст в файл, скажем, /home/имя_пользователя/программа.py. В приведенном имени под имя_пользователя понимается имя текущего пользователя, который авторизован в системе в данный момент времени. После выполненных манипуляций окно текстового редактора закрываем, открываем терминал (ctrl+alt+t), в терминале выполняем:python $HOME/программа.pyВ процессе выполнения в окне терминала будем видеть лог выполнения. Пример такого лога по-дефолту приведен под спойлером.
(Нажмите, чтобы показать/скрыть)
После окончания выполнения скрипта будет открыто окно браузера firefox (входит в стандартную поставку ubuntu, поэтому в скрипте "прибит гвоздями"), в котором будет загружена сгенерированная скриптом таблица. Для выполнения поиска по ключевому слову следует запустить скрипт с указанием параметра --obl, например таким образом:python $HOME/программа.py --obl карелияЕсли указанное ключевое слово не было найдено при парсировании, будет сгенерирован соответствующий лог, и выходной файл получен не будет:>>> python Парсинг_диапазонов_сотовых_операторов.py --obl ввожу_фигню
Найдено префиксов для области: 0
!!! Не найдено ни одного префикса по ключевому слову. Список не будет сгенерирован.
Вниманию пользователей: В скрипте на текущий момент времени не предусмотрено никакой проверки вводимого ключевого слова, - оно напрямую передается внутренним процедурам скрипта, что не правильно, но вместе с тем скрипт в рабочем состоянии, и со своей задачей справляется. Экранирование пробелов тоже не предусмотрено. Чтобы выполнить поиск по запросу "Мурманская обл", следует в качестве параметра obj указать либо "Мурманская обл" (в кавычках) либо Мурманская\ обл (с заэкранированным обратным слэшем пробелом):python $HOME/программа.py --obl "Мурманская обл"
python $HOME/программа.py --obl мурманская\ обл
« Последнее редактирование: 06 Октября 2018, 15:40:13 от zg_nico »
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн Vitsliputsli

  • Старожил
  • *
  • Сообщений: 1293
    • Просмотр профиля
Если в работе постоянно нужны телефонные коды, лучше использовать данные прямо с сайта Россвязи:
https://www.rossvyaz.ru/activity/num_resurs/registerNum/
Там, самая актуальная информация.

Оффлайн zg_nico

  • Автор темы
  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Vitsliputsli, ценное замечание. В рамках поставленной задачи, строго говоря, я не выбирал источник информации - попросили именно с того ресурса. Однако представленный Вами парсируется даже проще.
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
Wars ~.o

Оффлайн zg_nico

  • Автор темы
  • Заслуженный пользователь
  • Почётный модератор
  • Старожил
  • *
  • Сообщений: 3513
  • Nil mortalibus arduum est
    • Просмотр профиля
Цитата: man cu
The cu command is used to call up another system and act as a dial in terminal.
victor00000, это совершенно не то, что я вкладывал в исходный скрипт, насколько я могу судить. Там стояла задача именно формирование перечня номеров телефонов по ключевому слову. Ключевым словом являлась область, в которой данные номера задействованы. Данную задачу скрипт решает. Кроме того, как передал скрипт человеку, который о нем просил, - так сразу появилась вторая задача: сгенерировать именно список номеров телефонов. То есть файл (или несколько файлов), в которых был бы перечень вида:
Цитировать
9019680000
9019680001
9019680002
9019680003
...
Исходный скрипт был мною переработан, и на данный момент времени представляю Вашему вниманию, если угодно
(Нажмите, чтобы показать/скрыть)
Синтаксис вызова программы немного изменился. Аргументов теперь принимается два. Первый - obl (область, как и в первой версии - по ней без изменений); второй - dir (папка, в которую сохраняются сгенерированные файлы). Например, для генерации списка номеров телефонов, привязанных к республике Карелия:python $HOME/программа.py --dir /mnt/NTFSpart/ --obl карелияВ примере /mnt/NTFSpart/ - это папка, в которую сохраняются генерируемые файлы. Вот результат выполнения:
>>> ls /mnt/NTFSpart/
900_4550000-4649999.txt  911_4000000-4399999.txt  921_7000000-7029999.txt  958_0515000-0519999.txt  964_3170000-3199999.txt  996_1110000-1129999.txt
901_9620000-9629999.txt  911_6600000-6699999.txt  921_7260000-7289999.txt  958_1692100-1698699.txt  965_8170000-8179999.txt  996_2600000-2609999.txt
902_7700000-7799999.txt  921_0100000-0199999.txt  921_8000000-8059999.txt  958_1940500-1940999.txt  981_3950000-4199999.txt  996_9630000-9639999.txt
905_2370000-2379999.txt  921_2200000-2299999.txt  929_1700000-1759999.txt  958_3880000-3881999.txt  991_0170000-0170999.txt  999_0945000-0949999.txt
905_2990000-2999999.txt  921_4500000-4699999.txt  931_7000000-7039999.txt  958_4500000-4501999.txt  991_3831000-3836999.txt  999_1518000-1532999.txt
906_2060000-2099999.txt  921_5200000-5299999.txt  932_2220000-2220999.txt  958_5411040-5411049.txt  991_4754200-4782899.txt  999_1770000-1772999.txt
909_5670000-5729999.txt  921_6040000-6049999.txt  953_5250000-5499999.txt  960_2100000-2199999.txt  995_1046000-1047999.txt
911_0500000-0549999.txt  921_6200000-6299999.txt  953_9950000-9951999.txt  963_7400000-7499999.txt  995_5545000-5549999.txt
>>> cat ls /mnt/NTFSpart/900_4550000-4649999.txt | head -n 5
9004550000
9004550001
9004550002
9004550003
9004550004
Для получения всех результатов единым списком без дубликатов (если таковые были по каким-то причинам) остается сделать:cd /mnt/NTFSpart/
cat *.txt | sort | uniq > ./общий.txt
Собственно, изначальную задачу на этом считаю решённой.
Thunderobot G150-D2: Intel SkyLake Core i7-6700HQ 2.60GHz, 8Gb DDR4 2133 MHz, Intel HD530, NVidia GeForce GTX 960M 2Gb.  Ubuntu 16.04 64x [Unity], KUbuntu 18.04 64x.

Оффлайн victor00000

  • Старожил
  • *
  • Сообщений: 15568
  • Глухонемой (Deaf)
    • Просмотр профиля
ткую сложно, у меня телефон для ADSL супер, только ТС.
Wars ~.o

 

Страница сгенерирована за 0.049 секунд. Запросов: 24.