LINUX.ORG.RU

Помогите с кириллицой в python

 , ,


0

1

urllib'ом получаю текст со страницы. Латиница отображается нормально, а кириллица в виде \xКОД. Как всю полученную строку преобразовать в нормальный вид, чтобы ее можно было разобрать регуляркой?

Отображается где? В REPL? Есть разница между тем, чтобы просто получить значение выражения a (это вызывает __rep__) и распечатать его print(a).

PolarFox ★★★★★
()
Ответ на: комментарий от PolarFox
from urllib.request import urlopen
url = urlopen('http://yandex.ru')
print (url.read())

Таким образом получаю простыню с html-кодом. Вот случайный кусок из нее:

<div class="b-services__info"><ul class="b-services__list"><li class="b-content_list__item b-content_list__item_services b-inline"><a href="http://disk.yandex.ru/?source=services-main"class="b-link b-services__link">\xd0\x94\xd0\xb8\xd1\x81\xd0\xba</a></li><li class="b-content_list__item b-content_list__item_services b-inline"><a href="https://money.yandex.ru/"class="b-link b-services__link">\xd0\x94\xd0\xb5\xd0\xbd\xd1\x8c\xd0\xb3\xd0\xb8</a></li><li class="b-content_list__item b-content_list__item_services b-inline"><a href="http://fotki.yandex.ru/"class="b-link b-services__link">\xd0\xa4\xd0\xbe\xd1\x82\xd0\xba\xd0\xb8</a></li><li class="b-content_list__item b-content_list__item_services b-inline"><a href="http://yaca.yandex.ru/yca/cat/Entertainment/Games/game-play/"class="b-link b-services__link">
вместо \xкакое_то_значение должны быть кириллические буквы. Такое получатся и если пишу код в REPL, и когда запускаю как скрипт.

GOTOSIN
() автор топика

Для начала разберись что у тебя за кодировка, потом сконвертируй питоний байтстринг в нормальный юникод

anonymous
()
Ответ на: комментарий от anonymous

Еще желательно для работы с текстом использовать третий питон - он сразу объясняет приятным исключением, где ты обосрался

anonymous
()
Ответ на: комментарий от GOTOSIN

print (url.read())

print (url.read().decode('utf8'))

libastral ещё не смержен с питоном, поэтому он не умеет угадывать кодировку байтстрингов. А decode даёт юникодный стринг.

x3al ★★★★★
()
Ответ на: комментарий от anonymous

Конкретно в этом случае не объясняет — байтстринг можно передать в print(), а urllib — чисто байтстринг-ориентированная вещь.

Впрочем, почему ТС не юзает requests — хз.

x3al ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.