Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 8, 2015 22:12:36

WalinoR
От: Бердянск, Украина
Зарегистрирован: 2015-09-08
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер и русский язык

Я новичек. Решил написать парсер для сайта work.ua в качестве тренировки. Так вот когда я вывожу rows - то получаю вместо русских букв \u0412\u0430\u043a\u0430\u043d …

def parse(html):
    soup = BeautifulSoup(html)
    table = soup.find('div', class_='left-side sj-bl')
    rows = table.findAll('a')
    print rows

А если выводить переменную table, то русские буквы выводятся нормально.
Почему так и как это можно исправить?

Windows 7
Python 2.7.10

На всякий случай выкладываю .py файл

Отредактировано WalinoR (Сен. 9, 2015 13:37:17)

Прикреплённый файлы:
attachment my_scrab.py (516 байт)

Офлайн

#2 Сен. 8, 2015 23:50:29

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

Парсер и русский язык

поздравляю вас, вы сталь стопятсот милионным человек задавшим этот вопрос. Приза вам никакого не полагается, но в качестве утешительного момента могу подсказать вам взять любую книгу и по Python2 и прочитать про Unicode, объекты.

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

'Привет'
u'Привет'



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

Офлайн

#3 Сен. 9, 2015 01:27:20

Iskatel
Зарегистрирован: 2015-07-29
Сообщения: 291
Репутация: +  3  -
Профиль   Отправить e-mail  

Парсер и русский язык

WalinoR
На всякий случай вылаживаю .py файл

Не надо “вылаживать” надо выкладывать.
JOHN_16
вы сталь стопятсот милионным человек задавшим этот вопрос
Я “сталь стопятсот милионным” +1: как это безобразие (имея такую строку) перевести в какую-нить кодировку, какая функция такую строку ест?

Отредактировано Iskatel (Сен. 9, 2015 01:28:27)

Офлайн

#4 Сен. 9, 2015 18:31:42

WalinoR
От: Бердянск, Украина
Зарегистрирован: 2015-09-08
Сообщения: 13
Репутация: +  0  -
Профиль   Отправить e-mail  

Парсер и русский язык

Все равно я не нашел ответа, как перекодировать rows. Если отдельно брать элементы с этого объекта, то все норм, а весь список все равно остается не читаемый.

type(rows{2}) = <class ‘bs4.element.Tag’>

type(rows) = <class ‘bs4.element.ResultSet’>

type(unicode(rows{2})) = <type ‘unicode’>

unicode(rows{2}) = <a href=“/jobs-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81%d1%82+php/?days=124”>За 14 дней</a>

type(unicode(rows)) = <type ‘unicode’>

unicode(rows) = [<a href=“javascript:void(0)”>\u0417\u0430 30 \u0434\u043d\u0435\u0439</a>, <a href=“/jobs-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81%d1%82+php/?days=125”>\u0417\u0430 30 \u0434\u043d\u0435\u0439</a>, <a href=“/jobs-%d0%bf%d1%80%d0%be%d0%b3%d1%80%d0%b0%d0%bc%d0%bc%d0%b8%d1%81%d1%82+php/?days=124”>\u0417\u0430 14 \u0434\u043d\u0435\u0439</a>

В общем если тип данных ‘bs4.element.Tag’, то с кодировкой все в порядке. все русские буквы выводятся нормально. А как только тип ‘bs4.element.ResultSet’, который появляется при работе Findall(), то буквы отображаются через /u0441….

Отредактировано WalinoR (Сен. 10, 2015 16:14:13)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version