Python

[Python] 티스토리 웹 크롤링하기 (requests, BeautifulSoup)

teamnova 2025. 7. 10. 21:20
728x90

 

안녕하세요 오늘은 

티스토리 특정 블로그 게시글의 제목, 작성일자, 내용을 가져오는 웹 크롤링을 해보겠습니다. 

Python의 requests와 BeautifulSoup 라이브러리를 이용해, 웹 페이지의 HTML을 파싱하고 필요한 정보를 추출할 예정입니다. 

 

 

크롤링 과정은 아래와 같은 순서로 이루어집니다:

  1. URL 요청 및 응답 받기
  2. HTML 파싱
  3. 제목, 작성일, 본문 정보 추출
  4. 결과 출력

 

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

 

 

감사합니다