2014-01-31 2 views
1

Я столкнулся с проблемой в нижнем коде из-за специальных символов () в описании. Из-за этих специальных символов я получаю сообщение об ошибке.Как удалить специальные символы в python?

Ошибка: кодек 'ascii' не может декодировать байт 0x94 в позиции 821: порядковый номер не в диапазоне (128) Пожалуйста, помогите мне удалить эту ошибку.

данные в текстовой форме и данных в HTML форме приведены ниже соответственно

Ссылки: http://m.cellularoutfitter.com/p-85870-anycom-solar-bluetooth-car-kit_c.html (с Descripton в конце страницы)

Я пробовал различные методы и кодировки, но не удался.

Сначала я получаю полное src ссылки, а затем используя x path Я получаю описание в переменной. Я не могу опубликовать полный код по некоторым причинам. К сожалению код

Python:

parser = etree.HTMLParser(remove_blank_text=True, encoding="utf-8") 
tree = etree.HTML(popup_html, parser) 
    description = tree.xpath("//span[@itemprop='description' and not(src)] ") 

log.debug(str(description[0])) 
for desc in description: 
    log.debug(etree.tostring(desc,encoding='UTF-8')) 
    if etree.tostring(desc,encoding='UTF-8').find("IFRAME") < 0: 
     reply_dict['product_desc'] = reply_dict['product_desc'] + etree.tostring(desc,encoding='UTF-8') 
     reply_dict['product_desc'] = reply_dict['product_desc'].replace("&#13;\n", "").replace("\n", "<br/>").replace("img","").replace('< src="/productPics/altImgs/decal-skin-pdp-2.jpg"/>',"") 
     reply_dict['product_desc'] = reply_dict['product_desc'].replace("\xef\xbf\xbd","'") 
     reply_dict['product_desc'] = reply_dict['product_desc'].replace("\x92","'") 
     reply_dict['product_desc'] = "<br />".join(reply_dict['product_desc'].split("\n")).replace("  ", "&nbsp;").encode('ascii', 'xmlcharrefreplace') 

HTML код:

<div class="centerContain"> 
      Convenient Bluetooth car kit easily mounts to vehicle windshield and features high-performance solar panel capable of converting UV rays into Bluetooth battery power. What's included: ANYCOM Solar Bluetooth Car Kit, window mount, suction cups, 12/24V vehicle power adapter w/USB cable, 3M adhesive tape, user guide. 
      <ul> 
       <li>Solar panel recharges battery, providing 30 minutes of talk time for every 3 hours of sun light</li><li>Features Digital Signal Processing (DSP) technology, including compression and echo cancellation</li><li>Easily pairs with compatible devices</li><li>Bluetooth: v2.0</li><li>Talk Time: 15 hours</li><li>Standby Time: 25 days</li><li>Operating Range: 33 ft. (10 meters)</li><li>Size: 3.59� (H) x 1.98� (W) x 0.52� (D)</li><li>Weight: 2.11 oz.</li><li>Warranty: ANYCOM limited worldwide 2-year warranty</li> 
      </ul> 
     </div> 

в текстовой форме:

Удобный автомобильный комплект Bluetooth легко монтируется на лобовое стекло автомобиля и показывает высокоэффективную солнечную панель, способную преобразования ультрафиолетовых лучей в батарею Bluetooth. Что включено: ANYCOM Solar Bluetooth Car Kit, крепление для окна, присоски, адаптер питания автомобиля 12/24 Вт с USB-кабелем, клейкая лента 3M, руководство пользователя. Панель солнечных батарей перезаряжает аккумулятор, обеспечивая 30 минут разговора за каждые 3 часа солнечного света Особенности Технология цифровой обработки сигналов (DSP), включая сжатие и эхоподавление Легко соединяется с совместимыми устройствами Bluetooth: v2.0 Время разговора: 15 часов Время ожидания: 25 дней Рабочий диапазон: 33 фута (10 метров) Размер: 3,59 (H) x 1,98 (W) x 0,52 (D) Вес: 2,11 унции. Гарантия: ANYCOM ограничена во всем мире 2-летняя гарантия

+0

Где ваш код? То, что вам нужно сделать, это либо пропустить символы, которые не соответствуют допустимому диапазону, либо перехватить исключение. –

+0

Вставьте свой код здесь – curiousguy

+0

страница имеет текст, закодированный в iso-8859-1, но в мета-заголовке указано, что это utf8, что делает браузер неспособным идентифицировать эти символы, если вы измените кодировку на iso-8859-1, будет способный преобразовать в unicode, что символ – markcial

ответ

0

код неясен, но я думаю, что проблема с декодированием, он должен работать после декодирования с UTF-8

Например,

string = '(10 meters) Size: 3.59� (H) x 1.98� (W) x 0.52� (D) Weight:'.decode('utf-8') 
Смежные вопросы