• 카테고리

    질문 & 답변
  • 세부 분야

    데이터 분석

  • 해결 여부

    미해결

파이썬 XML 데이터 다루기에서

18.08.26 22:38 작성 조회수 431

0

깃허브연동 때도 질문을 했었는데(그건 일단 답변 주실때까지 기다리고)

기상청에서 xml데이터를 다운받았는데 아톰에서 urlretrieve한 xml데이터를 열때 한글이 깨집니다... 그래서 코딩할때도 똑같이 했는데 파싱이 안됩니다.. 어떡해야할까요..

'''import sys #한글 인코딩 모듈

import io # 한글 인코딩 모듈2

import urllib.request as req

from bs4 import BeautifulSoup

import os.path

sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = 'utf-8')# 한글 인코딩

sys.stderr = io.TextIOWrapper(sys.stderr.detach(), encoding = 'utf-8')# 한글 인코딩2

다운로드 url

url ='http://www.weather.go.kr/weather/lifenindustry/sevice_rss.jsp'

savename = "c:/Users/For Programming/section4/forcast.xml"

if not os.path.exists(savename):

req.urlretrieve(url, savename)

xml = open(savename,'r', encoding="utf-8").read()

soup = BeautifulSoup(xml,'html.parser')

지역확인

for location in soup.find_all("location"): # XML 파싱할때 find메소드가 효율적이다.

loc = location.find("city").string

print(loc)

'''

출력결과

Traceback (most recent call last):

File "C:UsersFor Programmingsection4826(2).py", line 17, in

xml = open(savename,'r', encoding="utf-8").read()

File "C:UsersFor ProgrammingAnaconda3envssection3libcodecs.py", line 321, in decode

(result, consumed) = self._buffer_decode(data, self.errors, final)

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

[Finished in 0.355s]

이렇게 뜹니다.. 어떡해야할까요?

답변 2

·

답변을 작성해보세요.

0

MIKE.aeon님의 프로필

MIKE.aeon

2021.02.22

인코딩 상태를 쉽게 알아보는 방법은 notepad++ 라는 프로그램(텍스트 에디터)에서 파일을 열고 인코딩 정보를 확인하시면 됩니다. 참고하세요. 다른 에디터들도 가능한데, 본인이 익숙한걸로 확인하셔도 됩니다.

저같은 경우는, 강좌 따라서 저장한  xml 파일은 utf-8 입니다.

0

안녕하세요.

파이썬3에서 인코딩 오류가 발생하는 경우는 운영체제에 따라서 살펴봐야 할 내용이 많습니다.

encoding="utf-8" 부분을 지워보시고 작업을 수행 해 보시고

또는 해당 xml파일을 직접 다운로드 받으셔서 캐릭터셋이 utf-8인지 파일은 깨지지 않았는지 확인도 해보세요.

우선 소스코드 상에서는 특별한 문제는 없어보입니다.

다운받은 파일 또는 운영체제를 살펴보셔야 될 것같습니다.

https://stackoverflow.com/questions/46000191/utf-8-codec-cant-decode-byte-0x92-in-position-18-invalid-start-byte

해당 에러에 대해서 잘 나와있는 stackoverflow 내용입니다.

참고하시면 될 것 같습니다.