(2021-07-26 수정)

이번에 크롤링 관련 모듈인 korea_news_crawler에 대해서 공부를 하면서 

해당 파일을 출력하던 도중 

 

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

 

 

일단 에러의 의미는 

utf-8 방식으로 디코딩을 할 수 없다는 뜻이고, 3번째 위치(2)의 바이트가 0xb0이라는 의미이다. 
즉, 3번째 위치에 있는 바이트를 utf-8방식으로 디코딩할 수 없다는 의미이다. 

 

이런 경우, pd.read_csv()함수 안에 단지 파일명만 파라미터로 주는 것이 아니라 encoding이라는 파라미터를 추가하여 
기존의 방식인 'utf-8'이 아닌 다른 방식을 지정을 해주어야 한다. 

(처음에 어떤 방식으로 디코딩이 되었는지에 대해서는 에러의 내용에서 알 수 있다. 여기에서는 'utf-8'로 디코딩을 할 수 없다는 에러가 떴으므로, 'utf-8' 방식으로 디코딩을 시도했음을 알 수 있다.)

 

초보 개발자의 입장에서 이런 에러는 대부분 외부에서 모듈을 가져와 사용하는 경우에 많이 발생하는 에러이다. 

즉, 해당 모듈이 설명되어 있는 자료들에서 어떤 방식으로 인코딩이 되어 디코딩을 해야하는지에 대해서 찾아보는 것이 가장 빠른 해결책이 될 수 있다.  

 

나의 경우에는 

 

 

korea_new_crawler의 소스코드 문서 중 하나인 articlecrawler.py 파일에서 utf-8과 euc-kr이 적혀있는 것을 확인할 수 있었다. 


추가로, 대부분의 인코딩 방식은 'utf-8'과 'euc-kr' 두가지 방식을 사용하고 있고, 종종 'utf-16' 등의 생소한 인코딩 방식을 사용하기는 하지만, 해당 자료들을 찾아보면 어렵지 않게 해결할 수 있음을 알 수 있다. 

 

결론적으로 

pd.read_csv()함수 안에 encoding = 'euc-kr' 코드를 추가해준 결과 에러가 발생하지 않고 정상적으로 작동하는 것을 알 수 있다. 

 

추가적으로, 만약 encoding = 'euc-kr'를 했을 때에도 여전히 pd.read_csv()에서 오류가 나는 경우에는 encoding = 'cp949'를 하면 제대로 돌아가는 경우가 대부분이다.

 

 

 

<정리>

 

해당 오류가 발생하는 경우, 

 

1. pd.read_csv()의 파라미터에 encoding = 'euc-kr'를 추가한다. 

 

2. pd.read_csv()의 파라미터에 encoding = 'cp949'를 추가한다. 

 

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기