Написать программу парсинга номеров телефонов пользователей VK.
Написать программу парсинга номеров телефонов пользователей VK.
Для валидации номеров использовать библиотеку phonenumbers на Python.
Библиотека позволяет проверить номер как мировой (с +) так и для страны, дописывая код страны в нужное место.
Общий смысл такой:
Считывание
функция get_users отправляет запрос на vk api вида api.vk.com/method/users.get?user_ids=1,2,3,...,100&fields=contacts по 100 id за раз, ответ парсит json.loads() и возвращает список словарей.
функция write_flie 1000 раз вызывает get_users с id из своего диапазона раз в полсекунды, полученый список сериализирует и пишет в файл папки(книги) с помощью pickle.dump
функция write_book создает папку, файлы в ней и 100 раз вызывает write_flie для своего диапазона id
главная функция выполняет write_book в pool.apply_async 33 раза, запуская 33 асинхронных пула (фактически только 2 или 4 одновременно, по количеству процессоров, остальные ждут в очереди)
Сборка
собираем записи из одного файла книги (100 000 записей) в один датафрейм с помощью pandas, удаляем лишние столбцы, оставляя id и номер телефона, удаляем пустые строки и пишем в датафрейм книги
чистим датафреймы книги от мусора (буквы, знаки и т.д.), пишем его в общий датафрейм. У меня вышло где-то миллион записей
Валидация
Используя phonenumbers.parse три раза с параметрами страны None, "RU" и "UA" (можно еще стран добавить), записываем номера в три колонки. Потом чистка от совпадений пар (id, number) для трех колонок тем же pandas и запись в один датафрейм на 2 колонки (id, номер).
Для одного id могут быть разные номера при валидации для разных стран.
Примечание: такая разбивка по файлам и фреймам, и поэтапный процесс сборки в один фрейм нужна для предотвращения вылета программы из-за нехватки памяти.
Еще для нахождения номеров в строке использовать phonenumbers.PhoneNumberMatcher, потому что может быть указано 2 или больше номеров в одной строчке.