파이썬 트위터 데이터 수집 및 유니코드 문자 한글 변환

아래의 코드는 트위터 스트림을 수집할 때 유니코드로 변환된 문자열을 한글로 변환시켜주는 예제이다. 사용된 파이썬의 버전은 3.5 이고 tweepy 라이브러리를 사용하였다.

# -*- coding: utf8 -*-
import tweepy

consumer_key='your-consumer-key'
consumer_secret='your-consumer-secret'
access_token='your-access-token'
access_token_secret='your-access-token-secret'

auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)

class listener(tweepy.streaming.StreamListener):
    def on_data(self, data):
        try:
            data = data.encode('utf-8')
            data = data.decode('unicode_escape')
        except:
            print('Err')

        print(data)
        return True
    def on_error(self, status):
        print('error : ', status)

twitterStream = tweepy.Stream(auth, listener())
twitterStream.filter(track='파이썬')

listeneron_data 함수에서 data 변수가 트위터 api로 부터 받은 트위터 검색 결과이다.

여기서 기본적으로 한글 문자열이  \ud788\ubcf4\uae30 와 같이 유니코드 문자열로 출력되는 문제가 있다.

data = type(data) # <class 'str'>
print(data) # ~ \ud788\ubcf4\uae30 ~

data = data.encode('utf-8')
data = type(data) # <class 'bytes'>
print(data) # b'~\\ud788\\ubcf4\\uae30~'

data 변수의 type을 출력해보면 str 타입이라고 출력되고 값을 출력해보면 \ud788\ubcf4\uae30 와 같은 형태로 출력된다.

data 변수를 encode 함수를 사용하여 bytes 형식으로 변환하면 출력되는 결과가 b'\\ud788\\ubcf4\\uae30' 와 같은 형태로 출력되는 것을 확인 할 수 있다.

한글 문자열의 경우 byte로 변환하면, b'\ud788\ubcf4\uae30' 이처럼 출력되는데 tweepy 라이브러리를 사용하여 수집할 때 한글 문자열이 유니코드로 변환된후 이 값이 디코딩되지 않은 상태로 string으로 변환되어 출력되기 때문에 위와 같이 출력된다.

data = data.encode('utf-8')
data = data.decode('unicode_escape')

유니코드 문자열을 한글로 변환하기 위해서는 먼저 데이터를 encode 함수를 통해 bytes 형으로 변환하고, decode 함수를 사용하여 ‘unicode_escape’ 처리를 해주면 한글이 제대로 출력된다.

댓글 남기기