2016-12-13 1 views
0

Привет Я пытаюсь извлечь комментарии на веб-странице, используя lxml и xpath. Вот мой код:UnicodeDecodeError при извлечении комментариев с веб-страницы с использованием lxml и xpath

pg = requests.get('https://www.makeupalley.com/product/showreview.asp/ItemId=164662/Sublime-Skin-BB-Cream-6-in-1/Yves-Rocher/BB-Cream', timeout=30) 
tr_pg = html.fromstring(pg.content) 

cm_pg = tr_pg.xpath('//p[@class="break-word"]/text()') 
for cm in cm_pg: 
    print cm 

Я получил эту ошибку

Traceback (most recent call last): 
    File "/Users/ghozan/PycharmProjects/MakeupAlley/main.py", line 22, in <module> 
    process_page('/product/showreview.asp/ItemId=164662/Sublime-Skin-BB-Cream-6-in-1/Yves-Rocher/BB-Cream') 
    File "/Users/ghozan/PycharmProjects/MakeupAlley/main.py", line 10, in process_page 
    cm_pg = tr_pg.xpath('//p[@class="break-word"]/text()') 
    File "src/lxml/lxml.etree.pyx", line 1587, in lxml.etree._Element.xpath (src/lxml/lxml.etree.c:57884) 
    File "src/lxml/xpath.pxi", line 307, in lxml.etree.XPathElementEvaluator.__call__ (src/lxml/lxml.etree.c:166905) 
    File "src/lxml/xpath.pxi", line 230, in lxml.etree._XPathEvaluatorBase._handle_result (src/lxml/lxml.etree.c:165893) 
    File "src/lxml/extensions.pxi", line 623, in lxml.etree._unwrapXPathObject (src/lxml/lxml.etree.c:160088) 
    File "src/lxml/extensions.pxi", line 657, in lxml.etree._createNodeSetResult (src/lxml/lxml.etree.c:160529) 
    File "src/lxml/extensions.pxi", line 678, in lxml.etree._unpackNodeSetEntry (src/lxml/lxml.etree.c:160740) 
    File "src/lxml/extensions.pxi", line 804, in lxml.etree._buildElementStringResult (src/lxml/lxml.etree.c:162214) 
    File "src/lxml/apihelpers.pxi", line 1417, in lxml.etree.funicode (src/lxml/lxml.etree.c:29944) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xe0 in position 615: invalid continuation byte 

Я знаю, что есть недопустимый символ в комментариях. Как я могу это решить?

+0

Привет ник, спасибо за быстрый ответ. Да, получается, что вы предложили работать ... –

+0

преобразовал его в ответ ниже. –

+0

Примечание: на странице это проблема: 'pg.content [49929: 49935]' u'Voil \ xe0! ' – Cyrbil

ответ

0

Можете ли вы спросить Запросы попытаться расшифровать его для вас? Используйте response.text (строка), а не response.content (байты).

Возможно, источник encoding источника - это нечто иное, чем UTF-8, которое может принять ваша библиотека XPath. response.encoding является Лучшим запросом Угадай на что это. Иногда веб-серверы/страницы не настроены на то, чтобы явно сказать, какую кодировку они используют, но все, что вы можете сделать, это догадываться.

Не помогает эта кодировка может быть указана в заголовке HTTP и/или в теге <meta>. Или сайты могут лежать. Или они могут смешивать кодировки. Обратите внимание, что ваш target website can't even validate, потому что кодировка неверна, и даже с этим изобилует ошибками.

0

У страницы есть кодированные символы.
Ex:

Voil�! You will now have an airbrushed look.[...](� la Cover Girl!) 

Вы можете избежать их декодирования вручную:

>>> pg.content.decode('utf8', errors='ignore') 
u'Voil! You will now have an airbrushed look.[...](la Cover Girl!)' 
Смежные вопросы