2016-12-13 16 views
0

こんにちは、lxmlとxpathを使用してWebページのコメントを抽出しようとしています。私はこのエラーlxmlとxpathを使用してWebページからコメントを抽出するときのUnicodeDecodeError

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 

私がコメントに無効な文字があることを知っているのだ

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 

:ここに私のコードです。これをどうすれば解決できますか?

+0

こんにちはニック、迅速な対応に感謝します。はい、それはあなたが働いていることを示唆していることが判明... –

+0

は、以下の答えにそれを変換しました。 –

+0

注:このページでは問題があります: 'pg.content [49929:49935]' u'Voil \ xe0! ' – Cyrbil

答えて

0

リクエストをリクエストしてデコードを依頼できますか? response.content(バイト)ではなく、response.text(文字列)を使用してください。

ソースのencodingはおそらく、XPathライブラリが想定しているかもしれないUTF-8以外のものです。 response.encodingは、最高でと推測しています。です。ウェブサーバ/ページは、エンコーディングがどのエンコーディングを使用しているかを明示的に指定するように設定されていない場合があります。

エンコーディングをHTTPヘッダーおよび/または<meta>タグで指定することはできません。またはウェブサイトが存在する可能性があります。あるいは、エンコーディングを混在させるかもしれません。エンコードが間違っていて、エラーが発生している場合でも、target website can't even validateには注意してください。

0

ページにひどくエンコードされた文字があります。
例:

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!)' 
関連する問題