Форум сайта python.su
Всем привет.
Есть строки, вида “\xd0\xb0 \u2013 \xd1\x83”, где \u2013 какой-то символ, в данном случае длинное тире. Вопрос, как от таких символов избавиться или перекодировать их? Потому что
e = "\xd0\xb0 \u2013 \xd1\x83" print e.encode('iso-8859-1')
Отредактировано spirits25 (Июль 8, 2013 19:45:11)
Офлайн
>>> e = "\xd0\xb0 \u2013 \xd1\x83" >>> e = e.replace('\u2013', '') >>> e '\xd0\xb0 \xd1\x83' >>>
Офлайн
Это было первое, что я попробовал. Но это прокатило бы в случае простого текста.
Видимо для понимания нужно больше.
import urllib2, lxml.html url = 'http://sport.mail.ru/news/olympics/13803168/' f = urllib2.urlopen(url).read() doc = lxml.html.document_fromstring(f) q = doc.find_class('js-newstext text')[0] s = q.text_content() e = s[1560:1580]
In [11]: e Out[11]: u'\xb1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb7\xd0\xb0 \u2013 \xd1\x83\xa0\xd1\x80\xd0' In [12]: e.encode('iso-8859-1') --------------------------------------------------------------------------- UnicodeEncodeError Traceback (most recent call last) /home/spirit/<ipython console> in <module>() UnicodeEncodeError: 'latin-1' codec can't encode character u'\u2013' in position 12: ordinal not in range(256) In [13]: e.replace('\u2013','') Out[13]: u'\xb1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb7\xd0\xb0 \u2013 \xd1\x83\xa0\xd1\x80\xd0' In [14]: e = s[1558:1580] In [15]: print e[:14].encode('iso-8859-1') бронза
Офлайн
может банально так:
>>> su=u'12й34\u201356' >>> >>> print su Traceback (most recent call last): File "<stdin>", line 1, in <module> File "C:\Python27\lib\encodings\cp866.py", line 12, in encode return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError: 'charmap' codec can't encode character u'\u2013' in position 5: character maps to <undefined> >>> >>> print su.encode('latin', 'ignore') 123456 >>> print su.encode('latin', 'replace') 12?34?56 >>>
Офлайн
Просто нужно было указать в какой кодировке страница и тогда все нормально.
Вот, пробуй.
import urllib2 import lxml.html url = 'http://sport.mail.ru/news/olympics/13803168/' f = urllib2.urlopen(url).read().decode('utf8') doc = lxml.html.document_fromstring(f) q = doc.find_class('js-newstext text')[0] s = q.text_content() e = s[1560:1580] print e
Офлайн
spirits25если это возникло
Как быть в этом случае? Какой должна быть регулярка или что вообще делать?
>>> e = u'\xb1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb7\xd0\xb0 \u2013 \xd1\x83\xa0\xd1\x80\xd0' >>> e u'\xb1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb7\xd0\xb0 \u2013 \xd1\x83\xa0\xd1\x80\xd0' >>> e.replace('\u2013', '') u'\xb1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb7\xd0\xb0 \u2013 \xd1\x83\xa0\xd1\x80\xd0' >>> e.replace(u'\u2013', u'') u'\xb1\xd1\x80\xd0\xbe\xd0\xbd\xd0\xb7\xd0\xb0 \xd1\x83\xa0\xd1\x80\xd0' >>>
wmnpyafnвот из-за того что ты в одну строку записал, кодировку страницы из заголовков ответа нельзя узнатьf = urllib2.urlopen(url).read().decode('utf8')
>>> import urllib2
>>> data = urllib2.urlopen('http://www.yandex.ru')
>>> data.headers.getheader('content-type')
'text/html; charset=UTF-8'
>>>
Отредактировано py.user.next (Июль 9, 2013 02:30:30)
Офлайн
Какую ты страницу парсишь и что из неё тебе вытащить нужно?
Офлайн
Всем спасибо! Строка f = urllib2.urlopen(url).read().decode('utf8') работает отлично=)
Какую ты страницу парсишь и что из неё тебе вытащить нужно?url = 'http://sport.mail.ru/news/olympics/13803168/' её и парсил.
Офлайн