스크레이핑
스크레이핑(scraping)은 컴퓨터 프로그램을 이용해 웹사이트나 소프트웨어 화면 등에 표시된 데이터를 자동으로 수집하고, 필요한 정보를 추출하여 구조화하는 기법이다. 웹에서 수행하는 경우 웹 스크레이핑(web scraping)이라고 한다.
스크레이핑은 사람이 화면을 보고 필요한 정보를 복사하는 작업을 프로그램으로 자동화하는 방식이다. 특히 웹 스크레이핑은 웹 페이지의 HTML 문서를 가져온 뒤 원하는 요소를 식별하여 텍스트, 링크, 가격, 날짜 등의 데이터를 추출하는 형태로 널리 사용된다.
웹사이트를 체계적으로 탐색하여 페이지를 발견하고 수집하는 작업은 일반적으로 웹 크롤링(web crawling)이라고 하며, 수집된 페이지에서 필요한 데이터를 추출하는 작업은 웹 스크레이핑이라고 구분할 수 있다. 다만 실제 소프트웨어와 문헌에서는 두 용어가 혼용되기도 한다. MDN은 웹 크롤러를 웹 페이지에서 데이터를 수집하기 위해 웹을 체계적으로 탐색하는 프로그램으로 설명한다.[1]
일반적인 웹 스크레이핑은 다음과 같은 과정으로 이루어진다.
- 대상 접근 — HTTP 요청이나 웹 브라우저 자동화를 이용하여 대상 페이지를 가져온다.
- 문서 분석 — HTML이나 XML 등의 문서 구조를 파싱한다.
- 데이터 선택 — CSS 선택자, XPath, HTML 요소 및 속성 등을 기준으로 필요한 부분을 찾는다.
- 데이터 추출 — 텍스트, URL, 숫자, 날짜 등의 값을 가져온다.
- 정제 및 구조화 — 불필요한 문자열을 제거하고 자료형이나 형식을 통일한다.
- 저장 — 추출한 결과를 CSV, JSON, 데이터베이스 등의 형태로 저장한다.
정적인 HTML 페이지는 HTTP 요청과 HTML 파서를 조합하여 비교적 간단하게 처리할 수 있다. 반면 JavaScript 실행 이후 데이터가 표시되는 동적 웹사이트는 브라우저 자동화, 웹사이트가 사용하는 API 분석 등의 추가적인 방법이 필요할 수 있다.
| 구분 | 웹 크롤링 | 웹 스크레이핑 |
|---|---|---|
| 주요 목적 | 웹 페이지를 탐색하고 발견·수집 | 페이지에서 특정 데이터를 추출 |
| 주요 대상 | URL과 웹 문서 | 문서 내부의 텍스트·속성·구조화된 정보 |
| 대표 사례 | 검색 엔진의 페이지 수집 | 상품 가격, 게시물 제목, 통계 자료 등의 추출 |
| 관계 | 스크레이핑할 페이지를 탐색하는 데 이용될 수 있음 | 크롤링으로 수집한 페이지를 대상으로 수행될 수 있음 |
실제 프레임워크에서는 두 기능이 하나로 결합되는 경우가 많다. 예를 들어 Scrapy는 웹사이트를 크롤링하면서 페이지에서 구조화된 데이터를 추출하는 웹 크롤링·스크레이핑 프레임워크로 설명된다.[2]
HTML 파싱은 서버에서 받은 HTML을 분석하여 원하는 요소를 직접 추출하는 방식이다. 정적인 웹 페이지를 처리할 때 비교적 단순하고 효율적이다.
브라우저 자동화는 실제 웹 브라우저를 프로그램으로 제어하는 방식이다. JavaScript 실행, 버튼 클릭, 스크롤 등 사용자 조작 이후에 데이터가 생성되는 사이트를 처리하는 데 사용할 수 있다.
API 이용은 웹 페이지 자체를 분석하는 대신 사이트에서 제공하거나 내부적으로 사용하는 API를 통해 구조화된 데이터를 얻는 방식이다. 공식 API가 제공된다면 일반적으로 HTML 구조 변경의 영향을 덜 받으며 안정적인 데이터 수집 방법이 될 수 있다.
스크레이핑에는 프로그래밍 언어와 목적에 따라 다양한 라이브러리와 프레임워크가 사용된다.
- Beautiful Soup — Python에서 HTML 및 XML 문서를 분석하기 위한 라이브러리이다. HTML 문서를 파싱한 뒤 태그 등의 객체로 구성된 트리에서 원하는 데이터를 탐색할 수 있다.[3]
- Scrapy — Python 기반의 웹 크롤링 및 웹 스크레이핑 프레임워크이다. 데이터 마이닝, 정보 처리, 모니터링, 자동화된 테스트 등에 활용할 수 있다.[4]
- 브라우저 자동화 도구 — 실제 브라우저를 제어하여 JavaScript 기반 동적 페이지에서 데이터를 가져오는 데 이용할 수 있다.
웹 스크레이핑은 대량의 공개 웹 데이터를 자동으로 수집해야 하는 분야에서 활용된다. 대표적인 용도는 다음과 같다.
- 상품 및 가격 정보 수집
- 뉴스와 게시물 모니터링
- 검색 엔진 및 데이터베이스 구축
- 시장 및 경쟁사 조사
- 학술 연구용 데이터 수집
- 웹사이트 변경 감시
- 자동화된 테스트
- 데이터 마이닝 및 통계 분석
웹에서 비교적 실시간에 가까운 데이터를 대량으로 수집할 수 있다는 장점 때문에 사회·경제 및 지리 연구에서도 데이터 획득 수단으로 활용된다. 다만 웹에서 수집한 데이터에는 누락, 변화, 개인화 등에 따른 편향이 발생할 수 있어 분석 과정에서 데이터의 대표성과 품질을 검토할 필요가 있다.[5]
웹 스크레이핑 프로그램은 대상 웹사이트의 구조에 의존하는 경우가 많다. 사이트 운영자가 HTML 구조나 CSS 클래스 이름 등을 변경하면 기존 추출 프로그램이 정상적으로 작동하지 않을 수 있다.
또한 현대의 웹 애플리케이션은 JavaScript를 이용해 데이터를 비동기적으로 불러오는 경우가 많아 단순히 최초 HTML만 내려받는 방식으로는 원하는 데이터를 얻지 못할 수 있다. 로그인, 세션, 페이지네이션, 요청 속도 제한, CAPTCHA 및 봇 탐지 시스템 등도 자동화된 데이터 수집을 어렵게 하는 요소이다.
최근에는 대규모 언어 모델이나 멀티모달 모델을 활용하여 페이지 구조를 해석하고 데이터 추출 과정을 자동화하려는 방식도 연구되고 있다.[6]
웹사이트는 서버 부하나 콘텐츠의 무단 수집을 방지하기 위해 요청 횟수를 제한하거나 자동화된 접근을 차단할 수 있다. 또한 `robots.txt`를 이용해 크롤러가 접근할 수 있는 영역에 대한 지침을 제공하기도 한다.
스크레이핑을 수행할 때에는 대상 사이트의 이용 약관, robots.txt, API 이용 정책, 저작권 및 개인정보 관련 규정 등을 확인할 필요가 있다. 특히 과도한 요청은 웹 서버에 불필요한 부하를 줄 수 있으므로 요청 빈도를 적절하게 제한하는 것이 중요하다.
robots.txt 준수와 자동 데이터 수집을 둘러싼 정책은 생성형 인공지능의 학습 데이터 수집이 확대되면서 더욱 중요한 쟁점이 되었다. 일부 웹 서비스는 자동 데이터 수집을 제한하기 위해 robots.txt와 요청 속도 제한 등의 수단을 사용하고 있다.[7]
- ↑ MDN Web Docs, 「Crawler - Glossary」, https://developer.mozilla.org/en-US/docs/Glossary/Crawler, 2026년 8월 11일 확인.
- ↑ Scrapy Project, 「Scrapy 2.16 documentation」, https://docs.scrapy.org/en/latest/index.html, 2026년 8월 11일 확인.
- ↑ Beautiful Soup, 「Beautiful Soup Documentation」, https://beautiful-soup.readthedocs.io/en/latest/, 2026년 8월 11일 확인.
- ↑ Scrapy Project, 「Scrapy at a glance」, https://doc.scrapy.org/en/latest/intro/overview.html, 2026년 8월 11일 확인.
- ↑ Jens Foerderer, 「Should we trust web-scraped data?」, https://arxiv.org/abs/2308.02231, 2026년 8월 11일 확인.
- ↑ Guan-Lun Huang·Yuh-Jzer Joung, 「Webscraper: Leverage Multimodal Large Language Models for Index-Content Web Scraping」, https://arxiv.org/abs/2603.29161, 2026년 8월 11일 확인.
- ↑ Reuters, 「Reddit to update web standard to block automated website scraping」, https://www.reuters.com/technology/reddit-update-web-standard-block-automated-website-scraping-2024-06-25/, 2026년 8월 11일 확인.
