Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 13, 2014 12:29:23

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

добрый день.
Возникла нужда парсить письма со своего ящика. Но скрипт ругается, что я ему подсовывая не стринг тип а байт какой-то. Подскажите куда копать.


import email
import poplib
serv = 'pop.mail.ru'
user = 'user@inbox.ru'
pasw = 'pass'
port = '110'
'def gettingletters():'
Mailbox = poplib.POP3 (serv, port)
Mailbox.user(user)
Mailbox.pass_(pasw)
resp, lst, octets = Mailbox.list()
print ("DEBUG: Total %s messages: %s" % (user, len(lst)))
messages = [Mailbox.retr(i) for i in range(1, len(Mailbox.list()[1]) + 1)]
messages = ["\n".join(mssg[1]) for mssg in messages]
messages = [parser.Parser().parsestr(mssg) for mssg in messages]
for message in messages:
    print ("{} : {}\n".format(message['subject'], message['From']))
        
Mailbox.quit()


Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 14, in <module>
messages = [“\n”.join(mssg) for mssg in messages]
File “C:\Python34\my_project.py”, line 14, in <listcomp>
messages = [“\n”.join(mssg) for mssg in messages]
TypeError: sequence item 0: expected str instance, bytes found

Офлайн

#2 Авг. 13, 2014 12:34:22

d54wvzc+i5zirs
Зарегистрирован: 2014-05-26
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

Попробуй строку

messages = ["\n".join(mssg[1]) for mssg in messages]
изменить вот так
messages = [b"\n".join(mssg[1]) for mssg in messages]

Офлайн

#3 Авг. 13, 2014 12:46:10

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

d54wvzc+i5zirs
Попробуй строку


Теперь новое:

Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 15, in <module>
messages =
File “C:\Python34\my_project.py”, line 15, in <listcomp>
messages =
NameError: name ‘parser’ is not defined

Офлайн

#4 Авг. 13, 2014 12:51:58

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

zigen
А вы парсер импортируйте, и ошибка уйдет. (Так же, рекомендуется, перед импортом его установить)

Офлайн

#5 Авг. 13, 2014 12:52:17

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

zigen
С этим разобрался , добавил from email import parser. Теперь вот опять на типы ругается

Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 16, in <module>
messages =
File “C:\Python34\my_project.py”, line 16, in <listcomp>
messages =
File “C:\Python34\lib\email\parser.py”, line 68, in parsestr
return self.parse(StringIO(text), headersonly=headersonly)
TypeError: initial_value must be str or None, not bytes


Попробовал сделать вот так: messages =
Ошибки все ушли, но не есть решение, т.к. на выходе None : None

Отредактировано zigen (Авг. 13, 2014 12:55:37)

Офлайн

#6 Авг. 13, 2014 12:56:30

d54wvzc+i5zirs
Зарегистрирован: 2014-05-26
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

print ("{} : {}\n".format(message['subject'], message['From']))
print ("{} : {}\n".format(message['subject'].decode('utf8'), message['From'].decode('utf8')))

Офлайн

#7 Авг. 13, 2014 13:00:06

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

d54wvzc+i5zirs
print (“{} : {}\n”.format(message.decode('utf8'), message.decode('utf8')))

Вот зараза =\

Traceback (most recent call last):
File “C:\Python34\my_project.py”, line 18, in <module>
print (“{} : {}\n”.format(message.decode('utf8'), message.decode('utf8')))
AttributeError: ‘NoneType’ object has no attribute ‘decode’

Офлайн

#8 Авг. 13, 2014 13:01:34

d54wvzc+i5zirs
Зарегистрирован: 2014-05-26
Сообщения: 62
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

Попробуй вот так:

print ("{} : {}\n".format(str(message['subject']), str(message['From'])))

Офлайн

#9 Авг. 13, 2014 13:03:11

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

Вот так помогло!!

messages = [parser.Parser().parsestr(mssg.decode('utf8')) for mssg in messages]

Офлайн

#10 Авг. 13, 2014 13:20:41

zigen
Зарегистрирован: 2014-08-13
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсинг писем с mail.ru

Только неясно как в русский декодировать вот такое на выходе :
=?utf-8?Q?0=9D0=B0_0=B20=B01=880=B5_?=
=?utf-8?Q?0=BE0=B11=8A1=8F0=B20=BB0=B50=BD?=
=?utf-8?Q?0=B80=B5_0=BE1=820=B20=B51=820=B80=BB0=B8_?=
=?utf-8?Q?1=81_0=B00=B41=800=B51=810=B0?=

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version