본문 바로가기
NLP

트위터 데이터 수집 (a.k.a twitterscraper)

by 볼록티 2020. 2. 5.
728x90
반응형

 데이터 수집을 위해서 트위터에 접근을 하는데, 제한사항이 많다. 시간적으로도 양적으로도 트위터 자체적으로 데이터에 대한 소유권을 그렇게 주장한다. 

 하지만 아래에 링크처럼 그러한 제한없이 크롤러를 만드시는 분들이 있어서 참고하여 잘 사용했다.

 

https://pypi.org/project/twitterscraper/0.2.7/

 

twitterscraper

Tool for scraping Tweets

pypi.org

https://github.com/taspinar/twitterscraper

 

taspinar/twitterscraper

Scrape Twitter for Tweets. Contribute to taspinar/twitterscraper development by creating an account on GitHub.

github.com

 

 

twitterscraper 라는 패키지를 설치해야한다. 늘 그렇듯 터미널에 pip install twitterscraper 하면 된다.

 아래의 코드는 한달치를 수집하고 데이터프레임에 넣어서 곧바로 엑셀로 내보내는 것이라서 다소 복잡해보일 수도 있지만 단 하나의 코드 query_tweets만 보면 된다. 이 함수 안에 원하는 키워드(여기서는 bitcoin) 그리고 limit(여기서는 100000)을 지정하고, begindate, enddate 를 아래 코드처럼 형식에 맞게끔만 넣어주면 된다.

from twitterscraper import query_tweets
import datetime as dt
import time

for i in range(1,30,1):
    result = pd.DataFrame(columns=['text','time'])
    if __name__ == '__main__':

        tmp1=[]
        tmp2=[]
        start=time.time()
        
        for tweet in query_tweets('bitcoin',100000, begindate=dt.date(2019,9,i), enddate=dt.date(2019,9,i+1)):
            

    #         print(tweet.timestamp) #작성시간
    #        print(tweet.text)      #트윗내용
            tmp1.append(tweet.text)
            tmp2.append(tweet.timestamp)
        result['text'] = tmp1
        result['time'] = tmp2
        result.to_excel('bitcoin_2019_9_{}.xlsx'.format(i))
        del result
        print(i)
        print(time.time()-start)
        

        
        
        

 

 

아래에는 달이 넘어가면 순서가 엉켜서, 매달 마지막 날 하루치는 따로 수집한다. 그 예시는 아래와 같다. 날짜만 바꾼 것이다.

from twitterscraper import query_tweets
import datetime as dt
import time

result = pd.DataFrame(columns=['text','time'])
if __name__ == '__main__':

    tmp1=[]
    tmp2=[]
    start=time.time()

    for tweet in query_tweets('bitcoin',100000, begindate=dt.date(2019,9,30), enddate=dt.date(2019,10,1)):

#         print(tweet.timestamp) #작성시간
#        print(tweet.text)      #트윗내용
        tmp1.append(tweet.text)
        tmp2.append(tweet.timestamp)
    result['text'] = tmp1
    result['time'] = tmp2
    result.to_excel('bitcoin_2019_9_{}.xlsx'.format(30))
    del result
    print(i)
    print(time.time()-start)

 

트위터 사이트에서 공식적으로 받을 수도 있지만 이러한 방법이 유효할 때까지는 계속 사용하면 좋을 것 같다. 꽤 트위터에 제한을 받지 않고 오랫동안 막히지 않는걸보면 정말 크롤러를 잘 만들었다고 밖에 할 수 없다...

728x90
반응형

'NLP' 카테고리의 다른 글

reading LangChain docs (1)  (0) 2024.01.16
BertSum 뉴스 추출 요약 모델  (0) 2022.09.15
비정형 데이터 - Doc2Vec  (0) 2019.12.19
비정형 데이터 - LDA  (0) 2019.12.16
비정형 데이터 - GloVe  (0) 2019.12.16

댓글