728x90
반응형
데이터 수집을 위해서 트위터에 접근을 하는데, 제한사항이 많다. 시간적으로도 양적으로도 트위터 자체적으로 데이터에 대한 소유권을 그렇게 주장한다.
하지만 아래에 링크처럼 그러한 제한없이 크롤러를 만드시는 분들이 있어서 참고하여 잘 사용했다.
https://pypi.org/project/twitterscraper/0.2.7/
https://github.com/taspinar/twitterscraper
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 |
댓글