Уведомления

Группа в Telegram: @pythonsu

#1 Окт. 15, 2010 19:37:06

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Beautiful Soup and encoding

Доброго времени суток =)
Задача состоит в следующем: Есть почтовое сообщение; из него нужно вывести только текст тела без html тегов.

Мой код:

from BeautifulSoup import BeautifulSoup
import re
doc = open("/home/adv/python/spam", "r")
txt = doc.read().decode("koi8-r")
soup = BeautifulSoup(txt)
for text in soup.body.findAll(text=True):
if text != "\n":
print text.rstrip().encode("utf8")
doc.close()
Текст данный скрипт находит, и выводит, да вот только не в той кодировке..

Текст почтового сообщения:
Content-Type: text/html; charset=koi8-r
Content-Transfer-Encoding: 8bit

<HTML><HEAD><TITLE></TITLE>
</HEAD>
<BODY>
<table width="800" border="3" align="center" cellpadding="20" bordercolor="#000066">
<tr>
<td bgcolor="#000079"><table width="760" cellspacing="0">
<tr>
<td><p><font color="#FFFFFF" face="Arial Black">еЧТПЧЙДЕОЙЕ 2009 ЖЙОБМ(16 НБС).<br>
рТЕДМБЗБЕН ВЙМЕФЩ ОБ ЖЙОБМШОЩК ЛПОГЕТФ<br>
ЛПОЛХТУБ "еЧТПЧЙДЕОЙЕ 2009".<br>
<br>
</font></p>
</td>
</tr>
<tr>
<td><p align="center"><font color="#F2F5FD"><strong><font color="#D7EBFF" size="7" face="Verdana, Arial, Helvetica, sans-serif">Eurovision</font><font face="Verdana, Arial, Helvetica, sans-serif"> <font color="#D7EBFF" size="7">2009</font><br>
<font color="#0000CC" size="5">SONG CONTEST</font></font></strong></font></p>
<p></p></td>
</tr>
<tr>
<td><p><font color="#FFFFFF" face="Arial Black">уФПЙНПУФШ ВЙМЕФПЧ ПФ 4000 ТХВ.<br>
дПУФБЧЛБ ВЕУРМБФОБС.</font></p>
<p><font color="#FFFFFF" face="Arial Black">у ХЧБЦЕОЙЕН,<br>
ЛПММЕЛФЙЧ "лПНРМЕЛУ - ВЙМЕФ"</font></p>
<p><font color="#FFFFFF" face="Arial Black">фЕМ. (495) 542-1-3-1-2</font></p></td>
</tr>
</table></td>
</tr>
</table>
</BODY></HTML>
А вот то, что он выводит:
п&#9571;п&#9558;п&#9554;п&#247;п&#9558;п&#8805;п&#9632;п&#8729;п·п&#8805;п&#8729; 2009 п&#8730;п&#8805;п·п&#9618;п°(16 п&#178;п&#9618;п&#9553;).

я&#9472;п&#9554;п&#8729;п&#9632;п°п&#9618;п&#8776;п&#9618;п&#8729;п&#178; п&#9619;п&#8805;п°п&#8729;п&#9555;п&#9560; п·п&#9618; п&#8730;п&#8805;п·п&#9618;п°п&#9559;п·п&#9560;п  п&#8993;п&#247;п·п&#8992;п&#8729;п&#9554;п&#9555;

п&#8993;п&#247;п·п&#8993;п&#9556;п&#9554;пёп&#9618; "п&#9571;п&#9558;п&#9554;п&#247;п&#9558;п&#8805;п&#9632;п&#8729;п·п&#8805;п&#8729; 2009".
Eurovision

2009
SONG CONTEST
я&#9488;п&#9555;п&#247;п&#8805;п&#178;п&#247;пёп&#9555;п&#9559; п&#9619;п&#8805;п°п&#8729;п&#9555;п&#247;п&#9558; п&#247;п&#9555; 4000 п&#9554;п&#9556;п&#9619;.

п&#9570;п&#247;пёп&#9555;п&#9618;п&#9558;п&#8993;п&#9618; п&#9619;п&#8729;пёп&#9552;п°п&#9618;п&#9555;п·п&#9618;п&#9553;.
я&#9488; п&#9556;п&#9558;п&#9618;п&#9557;п&#8729;п·п&#8805;п&#8729;п&#178;,

п&#8993;п&#247;п°п°п&#8729;п&#8993;п&#9555;п&#8805;п&#9558; "п&#9577;п&#247;п&#178;п&#9552;п°п&#8729;п&#8993;пё - п&#9619;п&#8805;п°п&#8729;п&#9555;"
я&#9492;п&#8729;п°. (495) 542-1-3-1-2
Заявленная кодировка в письме “koi8-r”, я вроде и декодирую из нее в юникод, а вот на выходе получаю бог знает что…(((
Помогите, ткните пальцем, где тут я ошибся???



Офлайн

#2 Окт. 15, 2010 22:02:33

Alex977
От:
Зарегистрирован: 2008-11-26
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

Beautiful Soup and encoding

Убрал decode/encode и все нормально вывелось (ОС - Windows).
Добавил fromEncoding=“koi8-r”, но и без этого скрипт отработал нормально.

from BeautifulSoup import BeautifulSoup
import re
doc = open("2.html", "r")
#txt = doc.read().decode("koi8-r")
txt = doc.read()
soup = BeautifulSoup(txt, fromEncoding="koi8-r")
for text in soup.body.findAll(text=True):
if text != "\n":
# print text.rstrip().encode("utf8")
print text.rstrip()
doc.close()
Про кодировки из документации к библиотеке:
http://wiki.python.su/%D0%94%D0%BE%D0%BA%D1%83%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%86%D0%B8%D0%B8/BeautifulSoup#Beautiful_Soup_.2BBDQEMAQ1BEI_.2BBEIENQQxBDU_Unicode.2C_.2BBEcENQRABEI_.2BBD8EPgQxBDUEQAQ4-



Отредактировано (Окт. 15, 2010 22:12:02)

Офлайн

#3 Окт. 16, 2010 11:29:28

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Beautiful Soup and encoding

Alex977
Проверил на Windows, та же история…
На обоих ОС (Windows XP SP2 & Linux Ubuntu ) стоит Python 2.6.5.
Может дело в кодеках `cjkcodecs` и `iconvcodec`, но в документации к Beautiful Soup написано, что их надо устанавливать, если версия Python'а ниже 2.4 (да и не японские иероглифы у меня). Но у меня то стоит 2.6.5…
А может дело в `chardet`? Так, ладно, попробую его инсталить.



Отредактировано (Окт. 16, 2010 11:36:08)

Офлайн

#4 Окт. 16, 2010 12:01:43

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Beautiful Soup and encoding

:cool: Супер, разрешил свой вопрос с кодировками =))))
Тема закрыта :)



Отредактировано (Окт. 16, 2010 13:45:46)

Офлайн

#5 Окт. 17, 2010 00:24:24

guranvir
От:
Зарегистрирован: 2010-03-16
Сообщения: 186
Репутация: +  0  -
Профиль   Отправить e-mail  

Beautiful Soup and encoding

А решением поделится?)



Отредактировано (Окт. 17, 2010 00:24:37)

Офлайн

#6 Окт. 17, 2010 08:04:59

grok
От:
Зарегистрирован: 2010-09-09
Сообщения: 74
Репутация: +  0  -
Профиль   Отправить e-mail  

Beautiful Soup and encoding

Всё просто: я работаю по линугой, письмо по умолчанию сохраниось в кодировке UTF-8, но так как его текст в KOI8-R получалась такая вот абракадаба. Позже сохранил его в KOI8-R и вот оно счастье… всё заработало))
Ну или можно было сначала перекодировать из UTF-8 в KOI8-R, а потом уже из него в UNICODE =)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version