2017-05-04 2 views
1

새 프로젝트를 만들고 있지만 제목에 오류를 해결할 수 없습니다.UnicodeDecodeError : 'ascii'코덱은 6233 위치의 바이트 0xf0을 디코딩 할 수 없습니다. 서수가 범위에 없습니다 (128)

여기에 코드입니다 :

#!/usr/bin/env python3.5.2 

import urllib.request , urllib.parse 


def start(url): 
    source_code = urllib.request.urlopen(url).read() 
    info = urllib.parse.parse_qs(source_code) 
    print(info) 


start('https://www.youtube.com/watch?v=YfRLJQlpMNw') 

답변

1

오류 메시지는 자체 설명입니다. ASCII 문자열이어야하는 입력 문자열에 0xf0 바이트가 있습니다.

parse_qs에 유니 코드 문자열 또는 ASCII 바이트 문자열이 필요하기 때문에 정확한 오류 메시지와 해당 줄을 입력해야합니다.하지만 info = urllib.parse.parse_qs(source_code)에서 발생했음을 알 수 있습니다.

파이썬하기 Standart 라이브러리에 대한 문서는 말한다 때문에, 유튜브에서 오는 데이터를 parse_qs 부르는 이유 첫 번째 질문은 다음과 같습니다

그래서

Parse a query string given as a string argument (data of type application/x-www-form-urlencoded). Data are returned as a dictionary. The dictionary keys are the unique query variable names and the values are lists of values for each name.

당신이 그것을 해석하는 =& 문자에이 구문 분석하려고 쿼리 문자열로 key1=value11&key2=value2&key1=value12 양식을 사용하면 { 'key1': [ 'value11', 'value12'], 'key2': ['value2']}이됩니다.

당신이 먼저 적절한 인코딩을 사용하여 유니 코드 문자열로 바이트 문자열을 디코딩, 또는해야 할 이유를 알고 있다면 어떤 바이트 수용 할 수있는 확실 Latin1 경우 :

def start(url): 
    source_code = urllib.request.urlopen(url).read().decode('latin1') 
    info = urllib.parse.parse_qs(source_code) 
    print(info) 
1

source_code = urllib.request.urlopen(url).read().decode('utf-8') 
+1

너무 감사를 많이 작동합니다. –

3

오류로 인해 유니 코드 객체에서 작동 함수 .encode의 발생보십시오. 그래서 우리는

.decode('unicode_escape') 

그래서 코드가 될 것입니다 사용하여 유니 코드 문자열로 바이트 문자열로 변환해야합니다

#!/usr/bin/env python3.5.2 

import urllib.request , urllib.parse 


def start(url): 
    source_code = urllib.request.urlopen(url).read() 
    info = urllib.parse.parse_qs(source_code.decode('unicode_escape')) 
    print(info) 


start('https://www.youtube.com/watch?v=YfRLJQlpMNw') 
+1

완벽하게 작동합니다. –

0

이 코드는 실제로 오히려 이상한 것입니다. 쿼리 구문 분석기를 사용하여 웹 페이지의 내용을 구문 분석합니다. 그래서 parse_qs를 사용하는 대신 this과 같은 것을 사용해야합니다.

관련 문제