GUI TwitterUrlCrawler
설명
- 원하는 트위터 계정이 작성한 트윗의 URL을 수집하는 코드입니다.
- 트위터는 로그인이 없으면 볼 수 있는 트윗의 양이 정해져 있으므로 계정 로그인이 필요합니다.
코드
main.py
import time
from selenium import webdriver
from selenium.webdriver import ChromeOptions, Keys
from selenium.webdriver.common.by import By
from selenium.webdriver.support import expected_conditions as EC
from selenium.webdriver.support.wait import WebDriverWait
import csv
import re
from datetime import datetime
# ----- 입력이 필요한 값 -----
# 내 트위터 계정 아이디
MY_TWITTER_ID = "INPUT_YOUR_PASSWORD"
# 내 트위터 계정 비번
MY_TWITTER_PW = "INPUT_YOUR_PASSWORD"
# 크롤링 하려는 상대방 아이디
TARGET_ID = "INPUT_TARGET_ID"
# ----- ----- ----- ----- -----
# 설정값들
# 크롤링 하려는 상대방 주소
TWITTER_TARGET_URL = f"<https://twitter.com/{TARGET_ID}>"
# 스크롤 딜레이
TIME_SLEEP = 3
tweet_urls = [] # 모든 트윗 주소를 담을 리스트
pattern = r'^https:\\/\\/x\\.com\\/' + re.escape(TARGET_ID) + r'\\/status\\/\\d+$'
now = datetime.now()
CURRENT_TIME = now.strftime("%y%m%d_%H%M%S%f")[:-3]
# ChromeDriver Option 설정.
options = ChromeOptions()
options.add_argument("headless")
options.add_experimental_option("excludeSwitches", ["enable-automation"])
# 로그인 과정
def login() :
username = WebDriverWait(driver, 20).until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'input[autocomplete="username"]')))
username.send_keys(MY_TWITTER_ID)
username.send_keys(Keys.ENTER)
time.sleep(1)
password = WebDriverWait(driver, 10).until(EC.visibility_of_element_located((By.CSS_SELECTOR, 'input[name="password"]')))
password.send_keys(MY_TWITTER_PW)
password.send_keys(Keys.ENTER)
print("로그인 성공")
time.sleep(TIME_SLEEP)
# 현재 페이지에 있는 모든 트윗을 수집.
def crawlingCurrentView() :
tweets = driver.find_elements(By.CSS_SELECTOR, "article")
for tweet in tweets:
links = tweet.find_elements(By.CSS_SELECTOR, "a")
for link in links:
href = link.get_attribute("href")
if href and re.match(pattern, href):
print(href)
tweet_urls.append(href)
# ----- ----- ----- ----- -----
# 동작하는 부분.
driver = webdriver.Chrome()
url = "<https://twitter.com/i/flow/login>"
driver.get(url)
login()
# 특정 사용자의 프로필 페이지 열기
driver.get(TWITTER_TARGET_URL)
time.sleep(TIME_SLEEP)
# 페이지의 끝까지 스크롤하면서 트윗 주소 수집
last_height = driver.execute_script("return document.body.scrollHeight")
while True:
crawlingCurrentView()
print("스크롤 내리는 중...")
# 스크롤을 페이지의 끝까지 내립니다.
driver.execute_script("window.scrollTo(0, document.body.scrollHeight);")
time.sleep(TIME_SLEEP)
# 스크롤 후 페이지의 높이를 다시 계산합니다.
new_height = driver.execute_script("return document.body.scrollHeight")
# 새로운 높이와 이전 높이가 같으면 더 이상 스크롤 할 필요가 없습니다.
if new_height == last_height:
print("스크롤 끝까지 내림 완료")
break
last_height = new_height
tweet_urls = list(set(tweet_urls))
# 트윗 주소를 CSV 파일로 저장
csv_filename = f'{TARGET_ID}_{CURRENT_TIME}.csv'
with open(csv_filename, 'w', newline='', encoding='utf-8') as file:
writer = csv.writer(file)
writer.writerow(['Tweet URL'])
for url in tweet_urls:
writer.writerow([url])
print(f"{len(tweet_urls)}개의 트윗 주소를 수집했습니다.")
# 드라이버 종료
driver.quit()
사용법
- Python 설치.
- cmd에서 pip install selenium으로 셀레니엄 설치.
- 코드를 복사해서 파이썬 파일을 만들어주세요. (ex. main.py)
- 메모장을 이용해도 됩니다.
- 확장자 지정만 파인썬 확장자인 .py로 해주세요.
- INPUT_YOUR_ID에 본인의 트위터 계정 아이디를 입력해주세요.
- INPUT_YOUR_PASSWORD에 본인의 트위터 계정 비밀번호를 입력해주세요.
- TARGET_ID 에 크롤링을 원하는 상대방 아이디를 입력해주세요.
- 저장을 해서 입력한 내용을 코드에 반영하세요.
- cmd에서 3에서 만든 파일을 찾아서, python명령어로 실행해주세요.