유튜브 채널 분석 자동화! 파이썬으로 영상 정보 자동 수집하기
"재택근무 중 오전 10시만 되면 화상회의가 끊긴다", "점심시간 이후에 유독 인터넷이 느린 것 같다", "인터넷 서비스 업체에 느리다고 항의하려는데 근거 자료가 없다"…
인터넷이 느리다는 느낌은 있지만 언제, 얼마나 느린지 정확한 데이터가 없으면 원인을 파악하기 어렵습니다. 파이썬을 한 번만 세팅해두면 다운로드·업로드·핑(Ping) 속도를 자동으로 측정해 날짜·시간과 함께 엑셀에 누적 저장합니다. 작업 스케줄러와 결합하면 하루 종일 자동으로 측정해 느린 시간대를 정확히 파악할 수 있습니다.
파이썬이 설치되어 있어야 합니다. 없다면 python.org에서 최신 버전을 받아 설치하세요. 설치 시 반드시 "Add Python to PATH"에 체크해야 합니다.
인터넷 속도 측정에 필요한 라이브러리를 설치합니다. 터미널(윈도우: CMD 또는 파워셸)을 열고 아래 명령어를 실행하세요:
pip install speedtest-cli pandas openpyxl
speedtest-cli는 Speedtest.net의 공식 서버를 활용해 인터넷 속도를 측정하는 라이브러리입니다. 별도 회원가입이나 API 키 없이 바로 사용할 수 있습니다. pandas와 openpyxl은 측정 결과를 엑셀에 누적 저장하는 데 사용합니다.
💡 이 코드로 측정하는 항목: 다운로드 속도(Mbps), 업로드 속도(Mbps), 핑(ms), 측정에 사용된 서버 위치, 측정 일시를 자동으로 수집해 엑셀에 누적 저장합니다.
아래 코드를 그대로 복사해서 메모장에 붙여넣고, speed_test.py로 저장하세요. 저장 시 파일 형식은 "모든 파일", 인코딩은 UTF-8로 설정합니다.
import speedtest
import pandas as pd
from pathlib import Path
from datetime import datetime
# ① 설정
OUTPUT_PATH = r"C:\Users\내이름\Desktop\인터넷속도_이력.xlsx" # ← 저장 경로
ALERT_DOWNLOAD = 50 # ← 다운로드 속도 경고 기준 (Mbps, 이 값 이하면 경고)
ALERT_PING = 100 # ← 핑 경고 기준 (ms, 이 값 이상이면 경고)
# ② 속도 측정
print(" 📡 인터넷 속도 측정 중... (30초~1분 소요)")
st = speedtest.Speedtest()
st.get_best_server() # 가장 가까운 서버 자동 선택
download = round(st.download() / 1_000_000, 2) # bps → Mbps 변환
upload = round(st.upload() / 1_000_000, 2)
ping = round(st.results.ping, 2)
server = st.results.server.get("name", "알 수 없음")
isp = st.results.client.get("isp", "알 수 없음")
now = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
print(f" ✔ 다운로드: {download} Mbps")
print(f" ✔ 업로드: {upload} Mbps")
print(f" ✔ 핑: {ping} ms")
print(f" ✔ 서버: {server} / ISP: {isp}")
# ③ 경고 판단
warnings = []
if download < ALERT_DOWNLOAD:
warnings.append(f"다운로드 속도 느림 ({download} Mbps)")
if ping > ALERT_PING:
warnings.append(f"핑 높음 ({ping} ms)")
warning_msg = " / ".join(warnings) if warnings else "정상"
# ④ 결과 정리
result = {
"측정일시": now,
"다운로드(Mbps)": download,
"업로드(Mbps)": upload,
"핑(ms)": ping,
"서버": server,
"ISP": isp,
"상태": warning_msg,
}
# ⑤ 엑셀에 누적 저장
output = Path(OUTPUT_PATH)
df_new = pd.DataFrame([result])
if output.exists():
df_old = pd.read_excel(output, engine="openpyxl")
df_all = pd.concat([df_old, df_new], ignore_index=True)
else:
df_all = df_new
df_all.to_excel(output, index=False)
if warnings:
print(f"\n ⚠ 경고: {warning_msg}")
else:
print(f"\n ✅ 속도 정상")
print(f"\n✅ 완료! 누적 {len(df_all)}회 기록 → {OUTPUT_PATH}")
OUTPUT_PATH에 측정 기록을 저장할 엑셀 파일 경로를 입력합니다.ALERT_DOWNLOAD에 경고 기준 다운로드 속도를, ALERT_PING에 경고 기준 핑 값을 입력합니다.python speed_test.py
측정에는 30초~1분 정도 소요됩니다. 정상 실행 시 터미널에 이렇게 출력됩니다:
📡 인터넷 속도 측정 중... (30초~1분 소요) ✔ 다운로드: 487.32 Mbps ✔ 업로드: 98.54 Mbps ✔ 핑: 12.48 ms ✔ 서버: Seoul / ISP: KT ✅ 속도 정상 ✅ 완료! 누적 1회 기록 → C:\Users\내이름\Desktop\인터넷속도_이력.xlsx
엑셀 파일을 열면 측정일시, 다운로드·업로드·핑 속도, 서버, ISP, 상태가 열별로 정리됩니다. 실행할 때마다 새 행이 추가되어 이력이 자동으로 누적됩니다.
오류 1: speedtest.ConfigFetchError
인터넷 연결이 불안정하거나 Speedtest 서버에 일시적으로 접근이 안 될 때 발생합니다. 잠시 후 다시 시도하거나, 아래처럼 예외 처리를 추가해 오류 발생 시 자동으로 재시도하도록 할 수 있습니다:
import time
for attempt in range(3): # 최대 3회 재시도
try:
st = speedtest.Speedtest()
break
except Exception:
print(f" 재시도 중... ({attempt+1}/3)")
time.sleep(10)
오류 2: 측정값이 실제보다 현저히 낮게 나옴
VPN이 켜져 있거나 동시에 대용량 다운로드가 진행 중이면 측정값이 낮게 나옵니다. 측정 전 VPN을 끄고 다른 네트워크 사용을 최소화한 상태에서 실행하세요.
오류 3: ModuleNotFoundError: No module named 'speedtest'
라이브러리 이름이 speedtest가 아닌 speedtest-cli입니다. 설치 명령어를 다시 확인하세요:
python -m pip install speedtest-cli
윈도우 작업 스케줄러를 활용해 30분마다 자동 측정하면 하루 종일 속도 변화를 기록할 수 있습니다. 작업 스케줄러 설정 방법은 이전 게시글 주식·환율 자동 수집 편을 참고하세요.
또는 코드 안에 반복 실행 루프를 추가할 수도 있습니다. 코드 ② 속도 측정 앞에 아래 루프를 추가하면 30분마다 자동으로 측정합니다:
import time
INTERVAL_MIN = 30 # ← 측정 간격 (분)
while True:
# 속도 측정 및 저장 코드 실행 (위 완성 코드 전체)
run_speed_test() # 함수로 감싸서 호출
print(f" ⏱ {INTERVAL_MIN}분 후 다시 측정합니다.\n")
time.sleep(INTERVAL_MIN * 60)
💡 이전 게시글과 결합하면: 텔레그램 자동 발송 편과 결합하면 속도가 기준 이하로 떨어졌을 때 즉시 알림을 받을 수 있고, 차트 자동 저장 편과 결합하면 누적된 속도 이력을 시간대별 그래프로 시각화할 수 있습니다.
이 코드를 응용하면 여러 지점의 네트워크 속도를 동시에 수집하거나, 특정 웹사이트의 응답 속도를 모니터링하는 것도 가능합니다.