본문 바로가기

인문학도 개발일지/웹프로그래밍

[파이썬][웹크롤링] 도널드 트럼프 트위터 크롤링하기

크롤링 시작 이유

- 미국과 중국의 무역분쟁이 한창 심화되었을 당시 트럼프의 트위터가 주식 시장을 술렁이게 했던 때가 있었다. 이에 국가 수장들의 발언이 주가 지표들과 어떤 상관관계를 가지는지 궁금해졌다. 가장 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

 

Mottl/GetOldTweets3

A Python 3 library and a corresponding command line utility for accessing old tweets - Mottl/GetOldTweets3

github.com

 

2. 코드 참고

 

Data Crawling - 파이썬을 이용한 트위터 수집하기

어떤 사건에 대한 사람들의 즉각적인 관심과 반응, 그리고 영향력자들이 어떻게 일반 사용자에게 영향을 미치는지 분석하는 데는 트위터 만한 SNS가 없다. 본 포스트에서는 예제로 19년 4월 4주차

jeongwookie.github.io