본문으로 건너뛰기
블로그로 돌아가기
개발·자동화

크롤링 스크래핑 차이: 파이썬 수집 순서와 허용 범위 확인법

웹 스크래핑은 웹페이지에서 필요한 값만 뽑는 작업이고 크롤링은 링크를 따라 페이지를 모으는 작업이다. 두 말의 차이, 파이썬 requests·Beautiful Soup 수집 순서, robots.txt 확인법과 허용 범위를 정리했다.

6분 소요개발·자동화
크롤링스크래핑웹 스크래핑파이썬 크롤링robots.txt
크롤링 스크래핑 차이: 파이썬 수집 순서와 허용 범위 확인법

웹 스크래핑은 웹페이지에서 필요한 값만 뽑아 표나 파일로 저장하는 작업이고, 크롤링은 링크를 따라 여러 페이지를 돌며 주소와 내용을 모으는 작업이다. 파이썬으로는 requests로 페이지를 가져오고 Beautiful Soup으로 값을 뽑아 CSV로 저장하는 순서가 기본이며, 수집 전에 robots.txt와 이용약관으로 허용 범위를 확인해야 한다(2026년 10월 16일 기준).

크롤링과 스크래핑 차이

크롤링은 시작 주소에서 링크를 따라가며 페이지 목록을 만드는 일이다. 검색엔진이 사이트를 돌아다니며 페이지를 발견하는 방식이 대표적이다. 스크래핑은 이미 정한 페이지에서 상품명, 가격, 제목처럼 원하는 값만 추출하는 일이다.

구분크롤링스크래핑
하는 일링크를 따라 페이지를 찾고 모은다페이지 안에서 필요한 값을 뽑는다
결과물페이지 주소와 원문 목록상품명·가격 같은 정리된 표
예시검색엔진이 사이트 전체를 돌아보기경쟁 상품 가격표를 CSV로 저장하기
크롤링과 스크래핑 차이를 비교한 도해
크롤링은 페이지를 찾고, 스크래핑은 값을 뽑는다

구글 서치콘솔이나 SEO 글에서 말하는 크롤링은 검색엔진이 페이지를 방문하는 일을 뜻하고, 데이터 수집에서 말하는 크롤링은 내 프로그램이 페이지를 돌며 모으는 일을 뜻한다. 검색엔진 쪽 설명은 SEO 뜻과 기본 방법 글에 있다.

파이썬 웹 스크래핑 방법

파이썬에서는 페이지를 가져오는 requests와 HTML에서 값을 뽑는 Beautiful Soup 조합으로 시작한다. 파이썬 설치와 가상환경은 파이썬 기초 독학 시작 방법 글에서 먼저 끝내 둔다.

  1. 패키지를 설치한다. Beautiful Soup 공식 문서는 beautifulsoup4를 설치하라고 안내한다. 이름이 비슷한 BeautifulSoup는 중단된 3버전이다. pip install requests beautifulsoup4
  2. 허용 여부를 확인한다. 다음 절의 robots.txt 확인을 먼저 한다.
  3. 페이지를 가져온다. requests 문서는 거의 모든 요청에 timeout을 넣으라고 안내한다. 지정하지 않으면 응답이 없을 때 프로그램이 무한정 멈출 수 있다.
  4. 값을 뽑아 저장한다.
파이썬 웹 스크래핑 방법 4단계 순서도
robots.txt 확인, 요청, 추출, 저장 순서
import csv
import requests
from bs4 import BeautifulSoup

url = "https://example.com/list"
headers = {"User-Agent": "my-scraper/0.1 (contact: me@example.com)"}

r = requests.get(url, headers=headers, timeout=10)
r.raise_for_status()

soup = BeautifulSoup(r.text, "html.parser")
rows = []
for item in soup.select(".item"):
    title = item.select_one(".title").get_text(strip=True)
    price = item.select_one(".price").get_text(strip=True)
    rows.append([title, price])

with open("items.csv", "w", newline="", encoding="utf-8-sig") as f:
    csv.writer(f).writerows(rows)

요청 라이브러리 requests 공식 퀵스타트는 헤더를 딕셔너리로 넘기는 방법과 raise_for_status()로 4xx·5xx 응답을 오류로 바꾸는 방법을 안내한다. 값을 고르는 select와 select_one은 Beautiful Soup 문서의 CSS 선택자 방식이다. .item, .title, .price는 예시 값이므로 대상 페이지에서 개발자 도구(F12)로 실제 클래스 이름을 확인해 바꾼다. CSV를 utf-8-sig(BOM이 붙는 UTF-8)로 저장하면 엑셀에서 열 때 한글 인코딩을 잘못 읽는 일을 피할 수 있다.

성공 확인은 세 가지로 한다. r.status_code가 200인지, rows의 길이가 화면에서 센 항목 수와 같은지, 만들어진 items.csv를 열어 첫 행의 값이 화면과 같은지 본다. 값이 비어 있다면 요청으로 받은 HTML에 그 값이 없는 것이다. 브라우저 개발자 도구의 네트워크 탭에서 데이터가 별도 주소로 오는지 먼저 본다.

크롤링 허용 범위: robots.txt 확인 방법

robots.txt는 사이트 주소 뒤에 /robots.txt를 붙여 여는 공개 파일로, 어떤 경로를 크롤러가 방문해도 되는지 적어 둔다. 표준 문서인 RFC 9309에 따르면 규칙은 User-agent 줄로 대상을 정하고 Allow와 Disallow로 경로를 허용·금지하며, 여러 규칙이 겹치면 더 구체적인 쪽이 적용된다.

파이썬 기본 라이브러리의 urllib.robotparser로 확인할 수 있다.

from urllib.robotparser import RobotFileParser

rp = RobotFileParser()
rp.set_url("https://example.com/robots.txt")
rp.read()
print(rp.can_fetch("my-scraper", "https://example.com/list"))

True면 그 경로는 robots.txt상 허용이고 False면 금지다. 파일이 없어 404가 오면 RFC 9309는 크롤러가 서버의 모든 자원에 접근해도 된다고 보고, 서버 오류(5xx)나 연결 실패면 전체 금지로 간주하라고 한다.

크롤링 허용 범위를 판단하는 세 가지 질문
수집 전에 확인할 세 가지 질문

다만 robots.txt가 허용한다고 해서 무엇이든 수집해도 된다는 뜻은 아니다. RFC 9309는 이 규칙이 접근 권한 부여가 아니라고 밝히고, 구글 문서도 robots.txt는 강제력이 없어 민감한 정보는 비밀번호 같은 다른 방법으로 보호해야 한다고 설명한다. 반대로 말하면 사이트 이용약관, 로그인 뒤의 개인정보, 저작권이 있는 콘텐츠는 robots.txt와 별개로 따져야 한다.

수집 전에 확인할 순서

순서확인 내용하지 않으면 생기는 문제
1공식 API나 제공 파일(CSV·RSS)이 있는지HTML 구조가 바뀔 때마다 코드가 깨진다
2robots.txt와 이용약관이 수집을 막는지사이트가 요청을 차단하거나 약관 위반을 주장할 수 있다
3개인정보·로그인 뒤 데이터가 섞여 있는지수집 자체가 문제가 될 수 있어 대상에서 뺀다
4요청 간격과 횟수서버에 부담을 줘 차단당한다

한국 사이트는 사정이 다르다. 네이버는 개발자센터에서 블로그 검색 API를 제공하므로 네이버 블로그·뉴스 글이 필요하면 화면을 긁기 전에 이 API부터 쓴다. 쇼핑몰 가격이나 후기는 로그인과 차단 정책이 사이트마다 달라 이용약관을 개별로 읽어야 한다.

요청은 한 번에 몰아서 보내지 말고 time.sleep(1)처럼 간격을 두고 보낸다. 같은 페이지를 반복해서 가져오지 않도록 받은 결과는 파일로 저장해 두고 다시 쓴다. 플랫폼이 API를 제공하는 데이터는 화면 구조가 바뀌어도 응답 형식이 유지되므로 스크래핑보다 API를 우선한다.

자주 묻는 질문

크롤링과 스크래핑 중 초보자는 무엇부터 배우나?

스크래핑부터 배운다. 페이지 하나에서 값을 뽑는 흐름을 익히면 링크를 따라가는 크롤링은 반복문 하나를 더하는 일이다.

스크래핑한 데이터를 블로그나 서비스에 그대로 써도 되나?

그대로 쓰기 전에 원 사이트의 이용약관과 저작권 표시를 확인해야 한다. 공개된 페이지라도 콘텐츠의 권리는 원 사이트나 작성자에게 있을 수 있다.

값이 비어서 나오면 어떻게 하나?

브라우저 개발자 도구의 네트워크 탭에서 데이터가 별도 요청으로 오는지 본다. JSON을 돌려주는 주소가 보이면 HTML을 파싱하는 대신 그 주소를 r.json()으로 읽는 편이 간단하다.

같은 주제 글

이 글이 도움이 되었다면 공유해주세요

최신 인사이트

관련 프로젝트

새 글을 이메일로 받아보세요

마케팅, 분석, 개발 인사이트를 정리해서 보내드려요.