Форум сайта python.su
Пытаюсь парсить страницу, на которой была вроде как cp1251:
page = urllib2.urlopen(self.source)
text = page.read().decode('cp1251').encode('utf-8')
#text = unicode(page.read(), 'cp1251', 'ignore')
output = cStringIO.StringIO(text)
print text
tree = html.parse(output)
root = tree.getroot()
news = root.cssselect('.news')[0]
self.text = news.cssselect('h3')[0].text
print self.text
Офлайн
lxml вроде нормально должен кушать юникод. Может быть загвоздка кроется в StringIO, которому не положен юникод (не путать utf-8 и юникод!). То есть до lxml в твоем коде доходит utf-8 а не юникод.
Да и StringIO тут вообще лишняя сущность. Есть же метод для чтения из строк а не из файлового объекта (fromstring насколько я помню)
Офлайн
igor.kaist
у меня такое чувство, что там весь текст почему-то дважды юникодится. Вот, например, при таком раскладе:
page = urllib2.urlopen(self.source)
text = page.read().decode('cp1251').encode('utf-8')
tree = html.fromstring(text)
news = tree.cssselect('.news')[0]
self.text = news.cssselect('h3')[0].text
for abz in news.cssselect('p'):
self.text += abz.text
print self.text
Офлайн
Все, справился, второй encode был не нужен.
page = urllib2.urlopen(self.source)
text = page.read().decode('cp1251')
tree = html.fromstring(text)
news = tree.cssselect('.news')[0]
self.text = news.cssselect('h3')[0].text
Отредактировано (Июнь 15, 2010 01:01:04)
Офлайн
Я же говорю, не путай утф-8 и юникод :) ты из ср1251 преобразовал в юникод а потом в утф-8
Офлайн
igor.kaist
это да, но если скормить lxml напрямую страницу в cp1251, вопреки заявлениям разработчиков о поддержке кодировок, на выходе будут кракозябры :)
Офлайн