Автоматизация скучных вещей: Парсинг данных из Outlook, IMAP и двухфакторная аутентификация
Table Of Content
Предварительные требования:
- Python 2.x
В этой статье я расскажу о том, как я автоматизировал процесс парсинга данных для своего друга. Задача заключалась в том, чтобы считывать идентификаторы/ключевые слова из таблицы Excel и заполнять данные, соответствующие этим идентификаторам, путем поиска и парсинга данных из соответствующих электронных писем. Хотя я не буду рассматривать все аспекты, я расскажу о проблемах, с которыми я столкнулся, и о способах их решения.
Первое, что приходит в голову для такой задачи, это использование пакета IMAP в Python. Я запустил сессию tmux, открыл VIM и начал работать над скриптом. С помощью пакета IMAP я смог получить доступ к почтовому ящику Outlook/Office 365. Вот небольшой фрагмент кода для входа:
Проблема 1: Двухфакторная аутентификация
Скрипт, который я создавал, не учитывал двухфакторную аутентификацию. Однако после небольшого поиска я обнаружил, что есть простое решение.
Решение: Пароли приложений. Пароль приложения позволяет получить доступ к учетной записи Office 365 в клиентских приложениях, таких как Outlook, Word и т. д. В моем случае я просто заменил пароль учетной записи на пароль приложения, и все заработало.
После входа я быстро понял, что я вошел не в тот почтовый ящик, который мне нужно было использовать. Мне нужно было получить доступ к общим почтовым ящикам, предоставленным Office 365.
Проблема 2: Вход в общий почтовый ящик
Решение: Решение этой проблемы также просто - нужно добавить email/псевдоним общего почтового ящика после символа \
, например: [[email protected]](https://gouravchawla.com/cdn-cgi/l/email-protection)\alias-name
В моем случае это выглядело примерно так: [[email protected]](https://gouravchawla.com/cdn-cgi/l/email-protection)\[[email protected]](https://gouravchawla.com/cdn-cgi/l/email-protection)
После того, как я справился с этим и смог получить доступ к правильному почтовому ящику, мне нужно было искать электронные письма, содержащие ключевое слово в теме. Вот фрагмент кода для поиска:
Если поиск успешен, то возвращается список строк вида: ['142 123 111']
Теперь, используя эти идентификаторы, я могу получить электронное письмо с сервера и распарсить нужную информацию. Вот фрагмент кода для получения письма и его парсинга:
Вышеуказанный код получает письмо и сохраняет его в словаре с именем 'result'. Теперь все необходимые данные можно сохранить в таблице Excel с помощью ‘openpyxl’.
В приведенном выше коде вы, возможно, заметили, что я извлекаю HTML-содержимое тела письма. Это связано с тем, что в теле письма была таблица, которую мне нужно было распарсить. Для этого я использовал BeautifulSoup.
Если у вас есть вопросы, не стесняйтесь задавать их в комментариях.
Ссылки:
Оригинал статьи опубликован на https://gouravchawla.com.