Python
[Python] 크롤링(crawling) 사용해보기: Velog 크롤링
dud9902
2025. 1. 10. 23:42
팀원들과 미니 프로젝트 진행하면서 크롤링이 필요하여 처음 사용해보게 되었다.
brunch, naver blog, reddit, tistory, velog, X 를 각자 하나씩 맡아서 크롤링을 진행하기로 했는데 나는 velog를 선택했다.
naver blog 크롤링을 먼저 끝내신분이 있어서 그 팀원의 코드를 사용해서 수정했다.

크롤링(crawling)이란?
웹 페이지의 정보를 자동으로 수집하고 저장하는 작업
먼저, 각 플랫폼마다 다르게 실행될수 있도록 crawling_service.py를 따로 만들어서 연결해주었다.
from crawling_naver import get_blog_content
from crawling_brunch import get_brunch_content
from crawling_velog import get_velog_content
from summarization_model import process_url
from crawling_tistory import get_tistory_content
from crawling_reddit import get_reddit_content
from crawling_x import get_x_content
def crawlingfromUrl(url: str):
content = None
title = None
tags = None
crawler = None
if 'brunch' in url:
crawler = get_brunch_content
if 'naver' in url:
crawler = get_blog_content
if 'tistory' in url:
crawler = get_tistory_content
if 'velog' in url:
crawler = get_velog_content
if 'reddit' in url:
crawler = get_reddit_content
if 'x' in url:
crawler = get_x_content
return process_url(url, crawler)
velog를 크롤링 할수있게 벨로그 글 하나를 들어가서 추출하고 싶은 내용의 HTML 태그를 찾아서 코드에 작성했다.
import requests
from bs4 import BeautifulSoup
import re
import emoji
# Velog 게시물의 내용을 크롤링하여 제목, 본문, 태그를 추출하는 함수
def get_velog_content(url):
"""
주어진 Velog URL에서 게시물의 제목, 본문, 태그를 크롤링하여 반환하는 함수.
"""
headers = {
# 웹 크롤링을 위한 User-Agent 설정
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36"
}
response = requests.get(url, headers=headers) # URL로 HTTP GET 요청
if response.status_code == 200: # 요청 성공 시
soup = BeautifulSoup(response.text, "html.parser") # HTML 파싱
# 제목 추출
title = soup.find("h1") # 제목 태그(h1)를 찾음
title_text = (
title.get_text(strip=True) if title else "제목을 찾을 수 없습니다."
) # 제목 텍스트 추출
# 본문 추출
content = soup.find(
"div", {"class": "sc-bXTejn FTZwa"}
) # 본문이 포함된 div를 찾음
if content: # 본문이 존재할 경우
text = " ".join(content.stripped_strings) # 본문 텍스트 추출 및 공백 제거
cleaned_text = re.sub(r"\s+", " ", text).strip() # 중복 공백 제거
cleaned_text = emoji.replace_emoji(
cleaned_text, replace=""
) # 텍스트에서 이모지 제거
else:
cleaned_text = "본문을 찾을 수 없습니다." # 본문이 없을 경우
# 태그 추출
tags = soup.find_all(
"a", {"class": "sc-dtMgUX gISUXI"}
) # 태그가 포함된 a 태그를 찾음
tag_list = (
[tag.get_text(strip=True) for tag in tags] if tags else []
) # 태그 텍스트 목록 생성
# 결과 반환
return {
"title": title_text,
"content": cleaned_text,
"tags": tag_list,
}
else: # 요청 실패 시
return {
"error": f"오류 발생: {response.status_code}"
}
# 직접 실행 시 테스트 코드
if __name__ == "__main__":
"""
스크립트를 직접 실행할 때, Velog 게시물 URL을 테스트하여 결과를 출력.
"""
# 테스트용 Velog URL
velog_url = "테스트용 Velog URL"
result = get_velog_content(velog_url)
print(result)