2012-04-18 2 views
1

Я использую python2.7 и lxml. Мой код нижеОшибка Python: кодек 'utf8' не может декодировать байт 0x92 в позиции 85: недопустимый стартовый байт

import urllib 
from lxml import html 

def get_value(el): 
    return get_text(el, 'value') or el.text_content() 

response = urllib.urlopen('http://www.edmunds.com/dealerships/Texas/Frisco/DavidMcDavidHondaofFrisco/fullsales-504210667.html').read() 
dom = html.fromstring(response) 

try: 
    description = get_value(dom.xpath("//div[@class='description item vcard']")[0].xpath(".//p[@class='sales-review-paragraph loose-spacing']")[0]) 
except IndexError, e: 
    description = '' 

Кодекса аварий внутри попытки, давая ошибку

UnicodeDecodeError at/
'utf8' codec can't decode byte 0x92 in position 85: invalid start byte 

Строка, которая не может быть кодировать/декодировать был: ouldnt быть

У меня есть пытался использовать множество методов, включая .encode ('utf8'), но никто не решает проблему. У меня 2 вопроса:

  1. Как решить эту проблему
  2. Как мой крах приложения, когда код проблемы заключается между попыткой кроме
+0

Сообщение весь отслеживающий, а не только последняя строка этого. – Kylotan

+1

Снимок для ответа @ Marcin. Проверка кодировки веб-страницы действительно полезна для отладки ошибок кодирования. [1] [1] [[введите описание изображения здесь] [1]]: http://i.stack.imgur.com/jVHTy.png –

ответ

8

Страница подается с charset=ISO-8859-1. Декодируем от этого до unicode.

[Snapshot of details from a browser. Credit @Old Panda]

+0

Я пробовал .decode ('iso-8859-1'), но все равно падает –

+1

@mangobug Если вы не покажете фактический код, включая вызов декодирования, никто не сможет вам помочь. – Marcin

0
    • пропустить символы на ошибках, или правильно декодировать его в Юникоде.
    • вы только поймать IndexError, а не UnicodeDecodeError
1

Ваш исключением пункта обрабатывает только исключения типа IndexError. Проблема заключалась в UnicodeDecodeError, который не является IndexError, поэтому исключение не обрабатывается этим исключением.

Также неясно, что делает «get_value», и это может быть причиной возникновения реальной проблемы.

+0

Я обновил свой код 'get_value' –

+0

Это не очень помогает, потому что теперь у нас есть функция get_text, которую мы не понимаем. И у нас еще нет полной трассы. Вам нужно предоставить полный контекст, иначе люди просто должны угадать проблему. – Kylotan

0
  1. декодировать ответ на unicode, правильно обрабатывать ошибки (игнорировать при ошибке) перед синтаксическим анализом fromhtml.

  2. уловить UnicodeDecodeError или все ошибки.

+0

Ответ заключается не в том, чтобы поймать все ошибки. Вот как вы скрываете ошибки в своей программе. – agf

Смежные вопросы

 Смежные вопросы