1

私はpython2.7とlxmlを使用しています。私のコードは以下の通りです

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

エンコード/デコードできなかった文字列は次のとおりです。

.encode('utf8')を含む多くの手法を使用してみましたが、問題を解決できるものはありません。私は2つの質問があります:

  1. この問題を解決する方法
  2. 問題のコードが試行の合間にある場合、アプリがクラッシュする可能性はありますか?
4

4 に答える 4

8

ページはで提供されていcharset=ISO-8859-1ます。それからユニコードにデコードします。

[ブラウザからの詳細のスナップショット。 クレジット@オールドパンダ]

于 2012-04-18T14:16:57.680 に答える
1

例外句は、IndexErrorタイプの例外のみを処理します。問題は、IndexErrorではないUnicodeDecodeErrorでした。したがって、例外はそのexcept句によって処理されません。

また、「get_value」が何をするのかは明確ではなく、実際の問題が発生している場所である可能性があります。

于 2012-04-18T14:14:17.713 に答える
0
    • エラーの文字をスキップするか、正しくデコードしてユニコードにします。
    • UnicodeDecodeErrorではなく、IndexErrorのみをキャッチします
于 2012-04-18T14:13:13.220 に答える
0
  1. fromhtmlで解析する前に、Unicodeへの応答をデコードし、エラーを適切に処理します(エラーは無視します)。

  2. UnicodeDecodeError、またはすべてのエラーをキャッチします。

于 2012-04-18T14:14:21.527 に答える