Dev/Python

[Python / Crawling]Tweepy를 통해 트위터에서 구어체 문장 수집하기 3

kyeoneee 2017. 5. 11. 18:38
반응형

이전 글에서 문제가 있었던 한글 키워드로 트위터를 크롤링하는 경우 함수에서 한글 키워드를 인식하지 못하는 점을 해결하였다. 처음에는 .encode('utf-8')을 통해 한글 문자를 인코딩하여 인자로 넘겨주어어야 하지 않을까 생각을 해보았지만 찾아보다 보니 파이썬은 기본적으로 문자열을 unicode로 인식을 한다. 기본적인 한글 문자열을 입력하지 않고 unicode형식으로 인자를 넘겨주면 문제가 해결 될 것 같아서 u'한글'의 형식으로 수정을 하였더니 원하던 대로 정상적인 작동을 하였다.

# -*- coding: utf-8 -*-
# 한글 주석을 사용하기 위함
import tweepy

consumer_key = 'consumer_key'
consumer_secret = 'consumer_secret'
access_token = 'access_token'
access_token_secret = 'access_token_secret'

file = open('crawlData.txt', 'a')

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

dataLenght = 0

class MyStreamLstener(tweepy.StreamListener): #기존 tweepy의 streamListener의 오버라이딩
def on_status(self, status):
if dataLenght==1000000: #원하는 데이터의 수를 지정하기 위한 조건문
return
dataStr = status.text
print (dataStr) #데이터가 크롤링 되는 모습을 확인하기 위한 출력문
file.write(dataStr.encode('utf-8'))
++dataLenght

def on_error(self, status_code):
if status_code == 420: #stream에 연결을 하지 못하는 에러가 발생하는 경우 False를 반환
return False

if __name__ == '__main__':
myStreamListener = MyStreamLstener()
myStream = tweepy.Stream(auth=api.auth, listener=myStreamListener)
#트위터 stream 중에 []배열 안에 들어간 단어들이 있는 문장만을 필터링 해줌
#파이썬은 기본적으로 문자열을 unicode로 인식함
#키워드를 u'한글'으로 하게 되면 기본적으로 인식하는 문자 형태인 unicode로 변환하여 읽음
#사용자들 간에 대화에서 많이 등장 할 만한 단어들인 "근데", "그냥", "했어"를 포함하는 트윗들을 읽어옴
myStream.filter(track=[u'근데', u'그냥', u'했어'])

추가적으로 

       dataStr = status.text
print (dataStr) #데이터가 크롤링 되는 모습을 확인하기 위한 출력문
file.write(dataStr.encode('utf-8'))
++dataLenght

이 부분에서 파일에 출력을 할 때 dataStr로 하면 에러가 났었다. 그래서 status.text를 확인해 보았더니 unicode형식인 status를 .text 모듈을 통해 해석을 하여 콘솔창에 출력을 해주는 것이었다. Unicode형식의 문자열인 DataStr을 'utf-8'형식으로 인코딩을 하여야 파일에 정상적인 출력이 된다.


파일에 출력된 결과물은 아래의 사진과 같이 나타난다.

대량의 구어체 데이터를 수집할 수 있어 좋지만 트위터의 특성상 은어 및 비속어도 많은 문제점들이 있어서 학습에 사용할 수 있을 지는 좀 미지수이다. 데이터를 정제하는 방법을 사용하던지 등의 해결책을 구해야 할 것 같다.

반응형