Добро пожаловать обратно! Это продолжение для расписания I, где мы охватываем изменения в нашей учетной записи Gmail, получая тему электронной почты и его отправителя и визуализируя некоторые данные электронной почты. Акцент этой части находится на получение тела электронных писем.
Если вы прочитаете первую часть и попробовали, я надеюсь, что это было без сцеплений. Если вы этого не сделали, но вы заинтересованы в том, чтобы узнать, как получить тело электронного письма, вы можете последовать отсюда. Давайте прыгнем прямо в.
Предварительные условия
- Python 3.
- Панда
- Учетная запись Gmail
Получать данные
Это было покрыто Часть Я Поскольку он включает в себя изменения в вашей учетной записи Gmail, чтобы Imaplib работать с ним.
Шаг 1: Импорт необходимых библиотек, чтобы получить данные электронной почты
Здесь мы импортируем библиотеки, которые нам нужны, которые являются iMaplib, Email, GetPass и Pandas. Вы можете установить Pandas, используя Пип устанавливает пандас
Если у вас его нет.
import imaplib import email import getpass import pandas as pd
Шаг 2: Получение доступа к серверу электронной почты
Здесь мы войти в сервер электронной почты с нашими учетными данными.
username = input("Enter the email address: ") password = getpass.getpass("Enter password: ") mail = imaplib.IMAP4_SSL('imap.gmail.com') mail.login(username, password)
Шаг 3: Указание почтового ящика для получения данных.
Здесь мы распечатаем список почты, чтобы увидеть доступные почтовые ящики и выбираем один.
print(mail.list()) mail.select("inbox")
Шаг 4: В поисках и выборе данных
Блок код ниже поиск поиска выбранного почтового ящика с заданными критериями, извлекает электронные письма и сохраняет его к переменным сообщениям. Здесь я ищу электронные письма от FreeCodeCamp.
result, numbers = mail.search(None, '(FROM "quincy@freecodecamp.org")') uids = numbers[0].split() uids = [id.decode("utf-8") for id in uids ] result, messages = mail.fetch(','.join(uids) ,'(RFC822)')
Шаг 5: Подготовка данных для экспортировки
Блок код ниже петлей через выявленные электронные письма, получает дату, которая была получена, которая отправила его, предмет почты и тело почты.
- Мы используем
Прогулка ()
Способ в электронной почте, чтобы получить детали и подпункты сообщения. - Мы используем
get_content_type ()
Способ получения почтового файла Maintype/подтип. - Мы используем
get_payload ()
Чтобы получить строку или экземпляр сообщения о части.
body_list =[] date_list = [] from_list = [] subject_list = [] for _, message in messages[::2]: email_message = email.message_from_bytes(message) email_subject = email.header.decode_header(email_message['Subject'])[0] for part in email_message.walk(): if part.get_content_type() == "text/plain" : body = part.get_payload(decode=True) body = body.decode("utf-8") body_list.append(body) else: continue if isinstance(email_subject[0],bytes): decoded = email_subject.decode(errors="ignore") subject_list.append(decoded) else: subject_list.append(email_subject[0]) date_list.append(email_message.get('date')) fromlist = email_message.get('From') fromlist = fromlist.split("<")[0].replace('"', '') from_list.append(fromlist)
Здесь мы преобразуем объекты в Date_List в объекты dateTime, используя to_dateTime ()
Способ, потому что время имеет свой формат UTC, мы нарезали формат UTC. Полученная информация затем преобразуется в DataFrame Pandas и экспортируется в файл CSV.
date_list = pd.to_datetime(date_list) date_list = [item.isoformat(' ')[:-6]for item in date_list] data = pd.DataFrame(data={'Date':date_list,'Sender':from_list,'Subject':subject_list, 'Body':body_list}) data.to_csv('emails.csv',index=False)
Очистка данных
Теперь мы собираемся просмотреть данные и очистить его там, где это необходимо для чтения. Сначала мы читаем в файле CSV и просмотрите его:
data = pd.read_csv("\emails.csv") data.head()
Вывод можно увидеть ниже, проходя через Escape Shies в колонне тела:
Функция ниже удаляет эвакуальные символы в тексте. В этом случае "\ R \ n"
Как видно на скриншоте выше. Это делает текст более читаемым.
def clean_data(data, column, i): data.loc[i, column] = data.loc[i, column].split("\r\n") new_string = " ".join(data.loc[i, column]) new_string = new_string.split("'',") data[column][i:i+1] = pd.DataFrame(data = new_string) return data
Ниже приведен код использует функцию выше для очистки каждого корпуса электронной почты в файле.
for n in range(len(data)): new_data = clean_data(data, column = "Body", i = n)
Вывод можно увидеть ниже:
Вам рекомендуется переписать новую функцию в соответствии с персонажами Escape, вы можете найти в теме или теле почта, который вы получили.
Заключение
Я столкнулся с ошибками во время написания этого, самым повторяющимся одному не удалось войти даже после выполнения инструкций на странице справки Google. Эта проблема была встречена, потому что у меня есть более одного аккаунта Gmail, и я не использовал свой адрес электронной почты по умолчанию. В случае, если вы столкнулись с тем же, решение описано ниже:
- Инструкция сказала: «Если советы выше не помогали, посетите https://www.google.com/accounts/displayunlockcaptcha и следуйте инструкциям на странице. ” Это открывается на новой вкладке.
- Ссылка на новой вкладке была ” https://accounts.google.com/b/0/displayunlockcaptcha «Где цифра 0 предназначена для учетной записи по умолчанию.
- Проверьте свои учетные записи в порядке, в котором они перечислены и изменяют цифру соответственно (например., «1» – это следующее письмо и так далее).
Вы можете найти полный код на GitHub ниже:
Йомокобия/email_analysis.
Анализ данных электронной почты
Анализ данных электронной почты
Спасибо, что добрались до конца этой статьи, я надеюсь, что вы веселитесь пробуть его.
использованная литература
- Переполнение стека; Как получить письмо электронной почты с помощью imaplib в Python?
- Документация по электронной почте Библиотека
- Документация библиотеки IMAP
Оригинал: “https://dev.to/yomaokobiah/email-analysis-with-python-3-part-ii-1ado”