2013-04-07 4 views
1

Новое на python и lxml, поэтому, пожалуйста, несите меня. Теперь застрял в том, что похоже на проблему с unicode. Я попробовал .encode, красивый юбокодэммит из супа без везения. Если бы вы искали форум и веб-сайт, но моя нехватка навыка python не смогла применить предлагаемое решение для моего конкретного кода. Цените любую помощь, спасибо.lxml unicode output issue

Код:

import requests 
import lxml.html 

sourceUrl = "http://www.hkex.com.hk/eng/market/sec_tradinfo/stockcode/eisdeqty.htm" 

sourceHtml = requests.get(sourceUrl) 

htmlTree = lxml.html.fromstring(sourceHtml.text) 

for stockCodes in htmlTree.xpath('''/html/body/printfriendly/table/tr/td/table/tr/td/table/tr/table/tr/td'''): 
    string = stockCodes.text 
    print string 

Ошибка:

UnicodeEncodeError: 'ascii' codec can't encode character u'\xa0' in position 0: ordinal not in range(128) 
+0

Не могли бы вы предоставить более подробную информацию об ошибке? Или добавьте строку 'print type (string)' before 'print string', чтобы узнать, что произошло. – iceout

ответ

0

Когда я запускаю свой код, как этот python lx.py, я не получаю сообщение об ошибке. Но когда я отправляю результат на sdtout python lx.py > output.txt, это происходит. Так что попробуйте это:

# -*- coding: utf-8 -*- 
import requests 
import lxml.html 
import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

Это позволяет перейти от ASCII по умолчанию в UTF-8, что среда выполнения Python будет использовать всякий раз, когда он должен декодировать буфер строки в Unicode.

+0

Спасибо. Вы не видите ошибку при перенаправлении вывода на экран? Могу ли я спросить вашу версию Python? Я бегу 2.7.3 –

+0

Кроме того, попробовал ваше предложение, но без радости. –

+0

Я использую 2.6. Какую ОС вы используете, Linux или Windows? – iceout

0

Атрибут text всегда возвращает чистые байты, но атрибут контента должен попытаться его закодировать. Вы также можете попробовать: sourceHTML.text.encode('utf-8') или sourceHTML.text.encode('ascii'), но я уверен, что последнее приведет к тому же исключению.