Рубрики
Без рубрики

Анализ электронной почты с Python 3 (часть II)

Добро пожаловать обратно! Это продолжение для расписания I, где мы охватываем изменения в нашей учетной записи Gmail, … Теги с Python.

Добро пожаловать обратно! Это продолжение для расписания 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.

Анализ данных электронной почты

Анализ данных электронной почты

Спасибо, что добрались до конца этой статьи, я надеюсь, что вы веселитесь пробуть его.

использованная литература

Оригинал: “https://dev.to/yomaokobiah/email-analysis-with-python-3-part-ii-1ado”