Python
[Python] 티스토리 웹 크롤링하기 (requests, BeautifulSoup)
teamnova
2025. 7. 10. 21:20
728x90
안녕하세요 오늘은
티스토리 특정 블로그 게시글의 제목, 작성일자, 내용을 가져오는 웹 크롤링을 해보겠습니다.
Python의 requests와 BeautifulSoup 라이브러리를 이용해, 웹 페이지의 HTML을 파싱하고 필요한 정보를 추출할 예정입니다.
크롤링 과정은 아래와 같은 순서로 이루어집니다:
- URL 요청 및 응답 받기
- HTML 파싱
- 제목, 작성일, 본문 정보 추출
- 결과 출력
1. 웹 페이지 요청 및 파싱
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
- 입력된 URL에 요청을 보내고, 응답이 정상인지 확인합니다 (raise_for_status()).
- HTML 내용을 BeautifulSoup으로 파싱합니다.
2. 제목 추출
meta_title_element = soup.find('meta', attrs={'name': 'title'})
- 가장 정확한 제목 정보를 가져오기 위해 <meta name="title"> 태그를 우선적으로 찾습니다.
- 만약 없다면 <meta property="og:title">를 대신 사용합니다.
og_title_element = soup.find('meta', attrs={'property': 'og:title'})
3. 작성일 추출
date_element = soup.find('span', class_='date')
- 티스토리 글에는 보통 span.date 클래스에 작성일이 들어 있습니다.
- .get_text(strip=True)를 사용해서 불필요한 공백을 제거한 텍스트만 추출합니다.
4. 본문 내용 추출
content_element = soup.find('meta', attrs={'property': 'og:description'})
- og:description 메타태그는 글 본문의 요약 혹은 일부를 포함하고 있어 간단한 스크랩에는 유용합니다.
- 더 자세한 본문을 원한다면 div 내부의 본문 콘텐츠 태그를 직접 찾아야 할 수도 있습니다.
결과
전체코드
import requests
from bs4 import BeautifulSoup
def scrape_tistory_post(url):
"""
주어진 티스토리 블로그 게시물 URL에서 제목(메타데이터), 작성일, 본문을 스크래핑하여 반환합니다.
(메타데이터 제목 추출 오류 수정)
"""
try:
response = requests.get(url)
response.raise_for_status()
soup = BeautifulSoup(response.text, 'html.parser')
print(f"--- '{url}' 에서 가져온 티스토리 게시물 정보 ---")
# 1. 게시물 제목 가져오기 (가장 정확한 방법: <meta name="title"> 사용)
meta_title_element = soup.find('meta', attrs={'name': 'title'})
if meta_title_element:
post_title = meta_title_element.get('content') # <-- 여기가 수정되었습니다! (strip=True 제거)
print(f"제목: {post_title}")
else:
og_title_element = soup.find('meta', attrs={'property': 'og:title'})
if og_title_element:
post_title = og_title_element.get('content') # <-- 여기도 수정되었습니다!
print(f"제목: {post_title}")
else:
print("제목을 찾을 수 없습니다. (meta name='title' 또는 og:title)")
# 2. 작성일 가져오기
date_element = soup.find('span', class_='date')
if date_element:
post_date = date_element.get_text(strip=True)
print(f"작성일: {post_date}")
else:
print("작성일을 찾을 수 없습니다. (span.date)")
# 3. 게시물 본문 가져오기
content_element = soup.find('meta', attrs={'property': 'og:description'})
if content_element:
post_content = content_element.get('content')
print("\n--- 본문 ---")
# 본문 출력은 길 수 있으므로, 제한을 두지 않고 전체 출력하도록 변경합니다.
print(post_content)
else:
print("본문을 찾을 수 없습니다. (div.contents_article)")
except requests.exceptions.RequestException as e:
print(f"웹페이지를 가져오는 중 오류가 발생했습니다: {e}")
except Exception as e:
print(f"스크래핑 중 오류가 발생했습니다: {e}")
if __name__ == "__main__":
tistory_url = "https://stickode.tistory.com/1552"
scrape_tistory_post(tistory_url)
예제에서 사용한 티스토리 블로그 글은 아래 게시글 입니다.
[Python] NumPy를 이용한 간단한 행렬 연산 및 TensorFlow로 선형 회귀 모델 구축
오늘은 딥러닝의 가장 기본적인 개념인 "선형회귀(Linear Regression)"를 이해하고자 파이썬 데이터 처리 라이브러리 NumPy 와 딥러닝 프레임워크 TensorFlow 를 사용해 간단한 딥러닝 학습 예제를 만들어
stickode.tistory.com
감사합니다