크롤링 시작 이유
- 미국과 중국의 무역분쟁이 한창 심화되었을 당시 트럼프의 트위터가 주식 시장을 술렁이게 했던 때가 있었다. 이에 국가 수장들의 발언이 주가 지표들과 어떤 상관관계를 가지는지 궁금해졌다. 가장 SNS를 열심히 활용하고 있는 미국 대통령 도널드 트럼프의 트위터가 데이터를 모으기에도 좋을 것 같고 상관관계가 극명하게 나타날 것 같아서 먼저 트럼프의 트위터를 크롤링 하기로 한다.
- 다만, 내 모국어가 아닌지라 언어 처리 과정에 조금 더 부담이 있는 것은 사실이다.
작업 환경
- 주피터 노트북 사용
크롤링 순서
1. GetOldTweet3 패키지 설치 및 사용 준비
**2. 수집기간 정의
**3. 트윗 수집
- 수집 기준 정의
- 수집
4. 변수 저장
**5. 파일 저장**
- 데이터프레임 생성
- csv 파일 만들기
6. 파일 확인
1. GetOldTweet3 패키지 설치 및 사용 준비
트위터 크롤링하기 위해선 Tweepy라고 하는 트위터 공식 API를 사용하는 방법이 있다. 하지만 현재시간부터 일주일 간의 데이터만 수집이 가능.
따라서, 직접 크롤러를 만들어야하나 했지만...구글링을 통해 우리의 빛과 소금 github에 변수를 입력하면 트위터 크롤링을 도와주는 크롤러가 있다는 것을 알게 된다.
GetOldTweet3 패키지를 설치하고 불러온다.
pip install GetOldTweets3
import GetOldTweets3 as got
[
Mottl/GetOldTweets3
A Python 3 library and a corresponding command line utility for accessing old tweets - Mottl/GetOldTweets3
github.com
](https://github.com/Mottl/GetOldTweets3)
내가 수집할 데이터는
permalink (str): 트윗 링크 **
**username (str): 아이디
text (str): 트윗 내용
date (datetime) in UTC: 트윗 일시
retweets (int): 리트윗 수
favorites (int): 좋아요 수
이외 데이터 변수는 위 패키지 링크를 참고!
2. 수집기간 정의
# 가져올 범위 정의
# 트럼프 임기 시작일: 2017년 1월 20일
import datetime # datetime 패키지
days_range = []
# datetime 패키지, datetime 클래스(날짜와 시간 함께 저장)
# strptime 메서드: 문자열 반환
start = datetime.datetime.strptime("2017-01-20", "%Y-%m-%d")
end = datetime.datetime.strptime("2019-12-31", "%Y-%m-%d")
date_generated = [start+datetime.timedelta(days=x) for x in range(0, (end-start).days)]
for date in date_generated:
days_range.append(date.strftime("%Y-%m-%d"))
print("===설정된 트윗 수집 기간: {} ~ {}===".format(days_range[0], days_range[-1]))
print("===총 {}일 간의 데이터 수집===".format(len(days_range)))
3. 트윗 수집
- 수집 기준 정의
# tweetCriteria로 수집 기준 정의
tweetCriteria = got.manager.TweetCriteria().setUsername("realDonaldTrump").setSince("2017-01-20").setUntil("2019-12-31")
- 수집
import time
# 수집
print("데이터 수집 시작========")
start_time = time.time()
tweet = got.manager.TweetManager.getTweets(tweetCriteria)
print("데이터 수집 완료======== {0:0.2f}분".format((time.time() - start_time)/60))
print("=== 총 트윗 개수 {} ===".format(len(tweet)))
4. 변수 저장
# 원하는 정보만 저장
# 유저 아이디, 트윗 내용, 날짜, 좋아요 수, 리트윗 수, 링크
from tqdm.notebook import tqdm
tweet_list = []
for i in tqdm(tweet):
username = i.username
tweet_date = i.date.strftime("%Y-%m-%d")
tweet_time = i.date.strftime("%H:%M:%dS")
content = i.text
favorites = i.favorites
retweets = i.retweets
link = i.permalink
info_list = [username, tweet_date, tweet_time, content, favorites, retweets, link]
tweet_list.append(info_list)
5. 파일 저장
- 데이터프레임 생성
import pandas as pd
# 데이터프레임 생성
twitter_df = pd.DataFrame(tweet_list, columns = ["ID", "날짜", "시간", "내용", "리트윗 수", "좋아요 수", "링크"])
- csv 파일 만들기
# csv 파일 만들기
twitter_df.to_csv("twitter_trump.csv"), index = False)
print("=== {}개의 트윗 저장 ===".format(len(tweet_list)))
=== 9670개의 트윗 저장 ===
6. 파일 확인
df_tweet = pd.read_csv("twitter_trump.csv".format(days_range[0], days_range[-1]))
df_tweet.head(10)
추후 처리할 내용
=> 불용어 처리
- 의미없는 주어, 동사 제거
- 특수기호 제거
- 다른 사람 아이디(ex. @blahblah) 제거
참고 링크
1. 트위터 크롤러 패키지: GetOldTweets3
2. 코드 참고
'인문학도 개발일지 > 웹프로그래밍' 카테고리의 다른 글
[python] 점프 투 파이썬 정규표현식 기초 - 메타문자 (0) | 2020.07.11 |
---|---|
[NLP] 자연어처리 - 개요 및 작업 환경 갖추기 (0) | 2020.04.12 |
[파이썬][pandas] 기업 주식 데이터 불러오기 - DataReader (0) | 2020.04.11 |
[수업노트] django - 회원정보 조회 (0) | 2020.03.01 |
[수업노트] django - 회원가입, 로그인, 로그아웃 기능 구현 (0) | 2020.02.29 |