Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 18, 2012 16:08:30

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Питон 2.7. Парсю сайт, юзая lxml
Пишу следующее:

categs = urllib.urlopen(url)
doc = lxml.html.document_fromstring(categs.read().decode('utf-8'))
categs = doc.cssselect('.submenu a') # список категорий
for cat in categs:
    title = cat.text.title()
    print title # все ок, выводится как надо. без абракадабры
    print cat.get('href') # если в ссылке есть русские символы - выводит абракадабру. Что забыл?
Пробовал cat.get('href').decode('utf-8') ругается на русский символ, что это не ascii



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Дек. 18, 2012 16:10:35)

Офлайн

#2 Дек. 18, 2012 23:10:59

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Проблема с кодировкой

barabansheg
categs = urllib.urlopen(url)
а вы уверены что содержащийся по урл документ использует UTF-8 кодировку?



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Дек. 19, 2012 04:53:43

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Я думаю <meta charset=“UTF-8”> об этом говорит. Плюс, если убрать decode после categs.read() то print title будет выдавать абракадабру.



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Офлайн

#4 Дек. 20, 2012 17:21:48

barabansheg
От:
Зарегистрирован: 2011-10-16
Сообщения: 114
Репутация: +  2  -
Профиль   Отправить e-mail  

Проблема с кодировкой

Не знаю как решить. Пропустил ту ссылку и все :) Но возник другой вопрос.
Я считываю имя папки с помощью dirs = os.listdir(dir), для каждой папки внутри dir нужно создать экземпляр модели, но когда я пишу

m = Material(
                    title = dirs[0], #имя папки
                     )
m.save()
              
то выдается ошибка: Warning: Incorrect string value: ‘\xD0\x92\xD0\xB5\xD0\xBB…’ for column ‘title’ at row 1
Если делаю a.decode('utf-8') то, тоже самое. Если unicode(a), то UnicodeDecodeError: ‘ascii’ codec can't decode byte 0xd0 in position 0: ordinal not in range(128)
Операционка - линукс и у меня 100% утф-8 :)

PS. Такая фигня даже если написать title=u'Папка', ругается на строку. Выполняю скрипт из manage.py shell

PPS. Проблема решена. Не углядел в БД. Таблица была другой кодировки.



Fidonet. Nod 2:5034/10. Идет набор. Подробности в личку.
Мой блог

Отредактировано barabansheg (Дек. 20, 2012 17:48:32)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version