Форум сайта python.su
0
Здравствуйте!
Возникла непонятная проблема кодировки при записи в словарь
Есть html файл примерно такого вида:
<h3> Текст 1 </h3>
<p> ...<b>в первом абзаце</b> ....</p>
<p> ... </p>
<p> ...<b>фрагмент 1</b> <b>фрагмент 2</b>....</p>
<h3> Текст n </h3>
...
<h3> Конец </h3>
# -*- coding: utf-8 -*-
filename = 'C:/work/fulltest.htm'
html_doc = open(filename, 'r')
from BeautifulSoup import BeautifulSoup
soup = BeautifulSoup(html_doc)
#подсчет заголовков == количество текстов + 1
count_h = soup.body.findAll('h3')
h = soup.body.find('h3') #первый заголовок в файле == первый текст
texts = {} #словарь вида [nt] -> [[s, s],[s],[s, s, s]]
i = 0
while i < len(count_h) - 1 :
pars = [] # содержание абзацев текста
while h.nextSibling.nextSibling.name != 'h3':
bolds = h.findAll('b') # все выделенные фрагменты абзаца
s_bolds = [] #тут храним строки из b.string
for j in range(len(bolds)) :
#print bolds[j].string
s_bolds.append(str(bolds[j].string).decode('utf8')) #переводим в строчку и храним не ссылку
print s_bolds[j] # выдает 'в первом абзаце'
h = h.nextSibling.nextSibling #переходим на следующий элемент
pars.append(s_bolds)
texts[i] = pars
i += 1 # следующий текст (h3)
h = h.nextSibling.nextSibling #переходим на следующий элемент
print texts # {выдает '0: [[], [u`\u0443\u043f ... '
Офлайн
63
Смотрите…
a = [u"Коля", u"Витя"] print a
[u'\u041a\u043e\u043b\u044f', u'\u0412\u0438\u0442\u044f']
for name in a: print name
Коля
Витя
a = [u"Коля", u"Витя"] print repr(a).decode("unicode_escape")
[u'Коля', u'Витя']
Отредактировано 4kpt (Дек. 15, 2012 16:06:19)
Офлайн
0
СПАСИБО! И правда, оказалось, что проблема в отображении вывода словаря.
если вывод заменить на цикл, который добирается до самой строки - то все работает!
for key in texts:
print key
for p in texts[key]:
for b in p:
print b
>>>0
>>>управления
s_bolds.append(str(bolds[j].string).decode('utf8')) Отредактировано xupacuma (Дек. 15, 2012 17:46:53)
Офлайн