CoderCastrov logo
CoderCastrov
Парсер

Автоматизация скучных вещей: Парсинг данных из Outlook, IMAP и двухфакторная аутентификация

Автоматизация скучных вещей: Парсинг данных из Outlook, IMAP и двухфакторная аутентификация
просмотров
2 мин чтение
#Парсер

Предварительные требования:

  • 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.