2016-12-18 25 views
0

私はudacityコースに従って、Pythonでクローラを作成しようとしています。私はこのメソッドを持っていますget_page()ページの内容を返します。UnicodeDecodeError: 'utf-8'コーデックは、位置1のバイト0x8bをデコードできません:無効な開始バイト

def get_page(url): 
    ''' 
    Open the given url and return the content of the page. 
    ''' 

    data = urlopen(url) 
    html = data.read() 
    return html.decode('utf8') 

は、元のメソッドは、単にdata.read()を返していましたが、その方法は、私がstr.find()のような操作を行うことができませんでした。クイック検索の後、私はデータをデコードする必要があることを知りました。しかし、今私はこのエラーが発生します

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

私はSOで同様の質問を見つけましたが、特にこれのためのものはありませんでした。助けてください。

+0

「url」値は何か教えてください。 – falsetru

+0

これはどんなURLでもかまいません。この場合はgoogle.co.in –

+0

でした。ヘッダーによると、ページは 'utf-8'ではなく' ISO-8859-1'でエンコードされています。 – falsetru

答えて

0

無効な文字列をデコードしようとしています。

有効なUTF-8文字列の開始バイトは、0x00から0x7Fの範囲内である必要があります。 だから0x8Bは間違いがあります。 RFC3629 Section 3から:

In UTF-8, characters from the U+0000..U+10FFFF range (the UTF-16 accessible range) are encoded using sequences of 1 to 4 octets. The only octet of a "sequence" of one has the higher-order bit set to 0, the remaining 7 bits being used to encode the character number.

あなたが解読しようとしている文字列を投稿する必要があります。

+0

これは実際にはWebページです。たとえば、もし私が 'url'としてhttp://google.co.inを渡した場合、私はこのエラーを受け取ります。 > UnicodeDecodeError: 'utf-8'コーデックは位置9862のバイト0xa0をデコードできません:無効な開始バイト –

0

おそらく、ページは「utf-8」以外の文字エンコードでエンコードされている可能性があります。したがって、開始バイトは無効です。 これを行うことができます。

def get_page(self, url): 
    if url is None: 
     return None 
    response=urllib.request.urlopen(url) 
    if response.getcode()!=200: 
     print("Http code:",response.getcode()) 
     return None 
    else: 
     try: 
      return response.read().decode('utf-8') 
     except: 
      return response.read() 
関連する問題