파이썬 기초

[파이썬 기초] 크롤링 개념

wildOjisan 2025. 5. 10. 09:28

웹 크롤링이란?

웹 크롤링(Web Crawling)은 인터넷 상의 웹 페이지에서 원하는 정보를 자동으로 수집하는 기술입니다. 예를 들어, 뉴스 사이트에서 최신 기사 제목을 모으거나, 쇼핑몰에서 상품 가격을 수집하는 작업이 이에 해당합니다.

 

필요한 도구 설치하기

먼저, 크롤링에 필요한 라이브러리를 설치해야 합니다. 터미널이나 명령 프롬프트에서 아래 명령어를 입력하세요:

pip install requests
pip install beautifulsoup4

 

 

간단한 크롤링 예제

다음은 네이버 뉴스의 메인 페이지에서 기사 제목을 수집하는 간단한 예제입니다:

import requests
from bs4 import BeautifulSoup

# 1. 웹 페이지 요청
url = 'https://news.naver.com'
response = requests.get(url)

# 2. HTML 파싱
soup = BeautifulSoup(response.text, 'html.parser')

# 3. 기사 제목 추출
titles = soup.select('.cluster_text_headline')

# 4. 결과 출력
for idx, title in enumerate(titles, 1):
    print(f"{idx}. {title.get_text().strip()}")

🔍 1. soup = BeautifulSoup(response.text, 'html.parser')는 무엇인가요?

이 코드는 웹 페이지의 HTML 코드를 파이썬이 이해할 수 있도록 변환하는 과정입니다.

  • response.text: 웹 페이지의 HTML 소스를 문자열로 가져옵니다.
  • BeautifulSoup(...): 가져온 HTML을 파싱하여 원하는 정보를 쉽게 추출할 수 있는 객체로 변환합니다.
  • 'html.parser': 파이썬 내장 HTML 파서로, 추가 설치 없이 사용할 수 있습니다. 다른 파서로는 'lxml'이나 'html5lib' 등이 있으며, 각각의 특징이 있습니다.

즉, 이 코드를 통해 soup 객체는 HTML 구조를 파악하고 원하는 데이터를 추출할 수 있는 상태가 됩니다.


🧩 2. titles = soup.select('.cluster_text_headline')는 무엇인가요?

이 코드는 HTML 문서에서 특정 요소들을 선택하는 역할을 합니다.간단한게좋다+1P_eli 개발 블로그+1

  • soup.select(...): CSS 선택자(CSS Selector)를 사용하여 원하는 HTML 요소들을 모두 선택합니다.
  • '.cluster_text_headline': 클래스 이름이 cluster_text_headline인 모든 요소를 선택합니다. CSS에서 클래스 선택자는 마침표(.)를 사용하여 지정합니다.간단한게좋다

이렇게 선택된 요소들은 리스트 형태로 titles에 저장됩니다.


🔁 3. for idx, title in enumerate(titles, 1):는 무엇인가요?

이 코드는 선택된 기사 제목들을 하나씩 출력하기 위한 반복문입니다.

  • for ... in ...: 리스트나 튜플 등의 순회 가능한 객체를 반복할 때 사용하는 문법입니다.
  • enumerate(titles, 1): titles 리스트를 순회하면서 인덱스(idx)와 요소(title)를 동시에 가져옵니다. 여기서 1은 인덱스 시작 값을 1로 설정하는 것입니다.위키독스

이 반복문을 통해 각 기사 제목을 번호와 함께 출력할 수 있습니다.


🧹 4. title.get_text().strip()는 무엇인가요?

이 코드는 HTML 태그를 제거하고 텍스트만 추출한 후, 앞뒤 공백을 제거합니다.

  • title.get_text(): HTML 요소에서 텍스트만 추출합니다.
  • .strip(): 추출된 텍스트의 앞뒤 공백을 제거합니다.

이렇게 하면 깔끔한 기사 제목만을 얻을 수 있습니다.

 

코드 설명

soup = BeautifulSoup(response.text, 'html.parser') HTML을 파싱하여 soup 객체 생성
soup.select('.cluster_text_headline') 특정 클래스명을 가진 요소들을 선택
for idx, title in enumerate(titles, 1): 선택된 요소들을 반복하면서 인덱스와 함께 처리
title.get_text().strip() HTML 태그를 제거하고 텍스트만 추출 및 공백 제거