트위터 스크래핑 라이브러리 twint 사용법

mare-solis·2022년 3월 31일
2

트위터를 스크래핑 하는 다양한 방법 중 가장 적법한 방법은 트위터 API를 사용하는 것입니다. 하지만 트위터 API에는 여러 한계가 존재합니다.

첫번째는 기간입니다. 트위터 API에서는 최근 7일 간의 데이터 밖에 스크래핑하지 못합니다. 두번째는 rate limit입니다. 15분마다 18000개의 트윗을 받도록 제한하고 있습니다.

따라서 트위터를 제한 없이 스크래핑 하기 위해 다양한 라이브러리가 등장했습니다. 대표적으로 twint, getOldtweets3, snscrape 등이 있죠. 따라서 트위터는 이런 라이브러리의 활용을 막기 위해 코드를 계속 변경하고, 라이브러리는 또 버그를 수정하는 적대적 관계가 형성되었습니다.

하지만 getOldtweets3은 2020년 9월 이후로 제대로 작동하지 않고, snscrape도 최근 발생한 이슈가 해결되지 않고 있습니다. 따라서 selenium으로 직접 스크래퍼를 만들지 않는 이상, 현재로서는 twint가 유일한 선택지입니다.

물론 twint 역시 완벽하다고 할 수 없으며 불안정한 상태이므로, 이 점은 유의하고 진행해야 합니다.


1. twint 설치

우선 설치부터 하겠습니다. 트위터 업데이트로 인해 트윈트 기존 버전은 오류가 발생합니다. 아래 누군가가 깃허브에 올려놓은 트윈트로 설치해주세요. 혹시 이전에 twint를 설치한 적이 있다면, 꼭 삭제 후 새로 설치해야 합니다.

!pip install git+https://github.com/woluxwolu/twint.git
import twint

2. 데이터 수집

2.1. 쿼리 서치

첫번째로는, 쿼리를 통해 검색되는 트윗을 모두 수집하는 코드를 실행해보겠습니다. 서치 쿼리 외에도 언어, 날짜 등 여러 조건을 추가할 수 있으니, 공식 문서를 참고해주세요 (https://github.com/twintproject/twint). config.Limit = 100처럼 리밋을 걸어주면 날짜 순으로 100개만 수집되고, 리밋이 없으면 해당하는 모든 트윗이 수집됩니다. 'squid game'이라는 검색어와 날짜를 설정하여 트윗을 수집해보겠습니다.

# Configure
config = twint.Config()
config.Search = 'squid game'
config.Lang = "en"
config.Since = '2021-09-17'
config.Until = '2021-11-26'
config.Store_json = True
config.Output = "squid game.json"

# Run
twint.run.Search(config)

2.2. 특정 유저 트윗

또는 특정 유저의 트윗을 수집하는 것도 가능합니다. 도널드 트럼프의 계정의 모든 트윗을 수집하는 코드는 아래와 같습니다.

import twint

# Configure
c = twint.Config()
c.Username = "realDonaldTrump"
config.Store_json = True
config.Output = "Trump.json"

# Run
twint.run.Search(c)

만약 트럼프의 트윗 중 'great'가 들어간 트윗만 수집하고 싶다면 c.Search = "great"를 추가해주면 됩니다. 쿼리 검색과 마찬가지로 언어, 날짜 등의 조건을 추가할 수 있습니다.

2.3. 그 외

그 외에도 특정 유저의 팔로워 목록, 팔로잉 목록을 가져오는 것도 가능합니다.

# Get follwer list
twint -u username --followers

# Get follwoing list
twint -u username --following

팔로잉 하는 계정 또는 팔로워의 계정에 대한 정보를 더 알고 싶다면 뒤에 --user-full을 추가합니다.

twint -u username --followers --user-full
twint -u username --following --user-full

3. 한계

이상 twint를 활용해서 트위터를 스크래핑 해봤습니다.

저는 'squid game' 코드를 실행했을 때 2021-11-26부터 2021-11-15까지만 수집되고 끊겼습니다. 그래서 2021-11-14부터 다시 실행했는데요. 이처럼 간혹 수집이 안정적이지 않을 때는 프로그램을 종료하고 기다린 후 재실행하면 다시 작동할 수 있습니다. 그리고 수집된 데이터에도 결함이 있는지 잘 확인하는 것도 중요하겠습니다.

하지만 이마저도 트위터에서 언제 막을지 모르기 때문에 (🥲) 필요한 데이터가 있다면 트위터 API를 활용해 주기적으로 아카이빙 해놓는 것을 추천드립니다.

profile
콘텐츠 전문가가 되고 싶은 방구석 연구인 🧐

0개의 댓글