TL;DR
- Scrapling은 파싱 속도가 BeautifulSoup4보다 784배 빠르고, 적응형 스크래핑 + 안티봇 우회 + Spider 프레임워크를 하나의
pip install로 해결해요. - 기존에 requests + BS4 + Selenium + Scrapy를 조합하던 작업을 단일 라이브러리로 대체할 수 있어요.
- BSD-3-Clause 라이선스, GitHub Stars 20,000+, Python 3.10+ 지원.
D4Vinci
/
Scrapling
🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!
العربيه | Español | Français | Deutsch | 简体中文 | 日本語 | Русский
Selection methods · Fetchers · Spiders · Proxy Rotation · CLI · MCP
Scrapling is an adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl.
Its parser learns from website changes and automatically relocates your elements when pages update. Its fetchers bypass anti-bot systems like Cloudflare Turnstile out of the box. And its spider framework lets you scale up to concurrent, multi-session crawls with pause/resume and automatic proxy rotation — all in a few lines of Python. One library, zero compromises.
Blazing fast crawls with real-time stats and streaming. Built by Web Scrapers for Web Scrapers and regular users, there's something for everyone.
from scrapling.fetchers import Fetcher, AsyncFetcher, StealthyFetcher, DynamicFetcher
StealthyFetcher.adaptive = True
p = StealthyFetcher.…문제: 라이브러리 뷔페가 된 스크래핑 코드
Python으로 웹 스크래핑 해보신 분이라면 공감하실 거예요.
-
requests로 HTML 받고 -
BeautifulSoup으로 파싱하고 - 동적 페이지가 나오면
Selenium이나Playwright꺼내고 - 안티봇 걸리면 또 다른 라이브러리 찾고...
라이브러리 3-4개를 조합해야 겨우 하나의 스크래퍼가 완성되거든요. 그리고 사이트 구조가 바뀌면? CSS 셀렉터 전부 다시 작성해야 해요.
Scrapling은 이 모든 걸 단일 라이브러리로 해결해요.
Scrapling이 뭔가요?
Karim Shoair(D4Vinci)가 만든 Python 웹 스크래핑 프레임워크예요. 2024년 첫 릴리즈 이후 빠르게 성장해서 현재 v0.4.1까지 나왔어요.
| 항목 | 상세 |
|---|---|
| 버전 | v0.4.1 (2026-02-27) |
| 라이선스 | BSD-3-Clause |
| GitHub Stars | 20,000+ |
| Python | 3.10+ |
| 테스트 커버리지 | 92% |
| 타입 힌트 | 100% |
Hacker News에 3회나 등장했고, Jupyter nbconvert에서는 BS4를 Scrapling으로 교체하는 걸 공식 검토 중이에요.
설치: 5분이면 끝나요
# 기본 설치 (정적 스크래핑만)
pip install scrapling
# 전체 기능 (브라우저 렌더링 + 안티봇 포함)
pip install "scrapling[all]"
# AI 에이전트 연동 (MCP 서버 포함)
pip install "scrapling[ai]"
# 브라우저 의존성 설치 (PlayWrightFetcher, StealthyFetcher 사용 시)
scrapling install
핵심 기능 1: 3단계 Fetcher — 웹 페이지 유형별 자동 대응
Scrapling의 설계 철학은 "웹 페이지 유형에 따라 최적의 도구를 선택한다"예요. 3단계 Fetcher 계층으로 구현되어 있어요.
Fetcher — 정적 HTTP 요청
가장 기본적인 계층이에요. httpx 기반으로, 단순 HTML 페이지에는 이것만으로 충분해요.
from scrapling.defaults import Fetcher
page = Fetcher.get('https://quotes.toscrape.com')
quotes = page.css('.quote .text::text').getall()
print(quotes)
TLS 지문 위조와 HTTP/3를 지원해서 기본 봇 탐지도 우회해요.
PlayWrightFetcher — 동적 페이지 렌더링
JavaScript로 콘텐츠를 로딩하는 사이트용이에요.
from scrapling.defaults import PlayWrightFetcher
page = PlayWrightFetcher().fetch(
'https://google.com',
disable_resources=True # 이미지/CSS 비활성화로 속도 향상
)
바닐라, real_chrome, cdp_url, nstbrowser 4가지 모드를 지원해요. 상황에 맞게 골라 쓰면 돼요.
StealthyFetcher — 안티봇 완벽 우회
가장 강력한 계층이에요. Camoufox(수정된 Firefox) 기반으로 최신 안티봇을 자동 우회해요.
from scrapling.defaults import StealthyFetcher
page = StealthyFetcher.fetch(
'https://protected-site.com',
headless=True
)
자동으로 처리하는 항목:
- Cloudflare Turnstile 자동 우회
- CDP 누출 방지
- WebRTC IP 노출 차단
- Canvas 지문 무작위화
- Headless 탐지 패치
핵심 기능 2: 적응형 스크래핑 — 사이트가 바뀌어도 코드는 그대로
이게 Scrapling의 진짜 차별점이에요.
기존 스크래핑 도구의 가장 큰 문제가 뭔가요? 사이트가 HTML 클래스명만 바꿔도 코드가 전부 깨진다는 거예요. Scrapling의 auto_match는 이 문제를 근본적으로 해결해요.
from scrapling.defaults import Fetcher
# 1단계: 첫 스크래핑 시 요소 "지문"을 SQLite에 저장
page = Fetcher.get('https://example.com')
products = page.css('.product', auto_save=True)
# 2단계: 사이트 구조가 변경되어도 자동 매칭
page = Fetcher.get('https://example.com')
products = page.css('.product', auto_match=True)
# -> .product가 .item-card로 바뀌어도 자동으로 찾아냄
AutoScraper 대비 5배 빠른 성능(2.39ms vs 12.45ms)이에요. 사이트 구조 변경 때문에 셀렉터 유지보수하느라 시간 쓰시는 분들에게 진짜 게임 체인저예요.
핵심 기능 3: Spider 프레임워크 — Scrapy 스타일 대규모 크롤링
v0.4에서 추가된 Spider는 Scrapy 스타일의 대규모 크롤링을 지원해요. 근데 학습 곡선이 훨씬 낮아요.
from scrapling import Spider, Request
class QuotesSpider(Spider):
start_urls = ['https://quotes.toscrape.com']
async def parse(self, response):
for quote in response.css('.quote'):
yield {
'text': quote.css('.text::text').get(),
'author': quote.css('.author::text').get(),
}
next_page = response.css('.next a::attr(href)').get()
if next_page:
yield Request(next_page, callback=self.parse)
일시정지/재개, 동시성 제한, 도메인별 스로틀링, HTTP+스텔스 혼용, 전면 async까지 지원해요. Scrapy의 핵심 기능을 훨씬 간단한 API로 쓸 수 있어요.
벤치마크: 숫자로 보는 성능 차이
5,000개 중첩 HTML 요소 파싱 기준 공식 벤치마크예요:
| 도구 | 파싱 시간 | 배수 |
|---|---|---|
| Scrapling | 2.02ms | 1x (기준) |
| Parsel/Scrapy | 2.04ms | 1.01x |
| Raw lxml | 2.54ms | 1.26x |
| PyQuery | 24.17ms | ~12x 느림 |
| MechanicalSoup | 1,549ms | ~767x 느림 |
| BS4 + lxml | 1,584ms | ~784x 느림 |
| BS4 + html5lib | 3,392ms | ~1,679x 느림 |
메모리도 차이가 커요. Scrapling은 약 1.5MB, BS4는 약 7MB를 사용해요.
Parsel/Scrapy와 거의 동일한 성능인 이유는 Scrapling도 내부적으로 lxml 기반 파싱을 사용하기 때문이에요. 하지만 BS4 대비 784배는 실사용에서 체감이 확실히 돼요.
경쟁 도구 비교 요약
| 항목 | BS4 | Selenium | Playwright | Scrapy | Scrapling |
|---|---|---|---|---|---|
| HTTP 요청 내장 | X | X | O | O | O |
| 동적 페이지 | X | O | O | 미들웨어 | O |
| 안티봇 우회 | X | 매우 취약 | 별도 필요 | 별도 필요 | 내장 |
| 적응형 파싱 | X | X | X | X | O |
| Spider 프레임워크 | X | X | X | O | O |
| 학습 곡선 | 최저 | 낮음 | 낮음 | 높음 | 낮음 |
MCP 서버: AI 에이전트 연동
Scrapling은 MCP(Model Context Protocol) 서버를 내장하고 있어요. Claude 같은 AI 에이전트가 직접 웹 데이터를 추출할 수 있어요.
pip install "scrapling[ai]"
LLM 기반 워크플로우에서 웹 데이터 수집을 자동화할 때 유용해요. 토큰 효율적으로 필요한 데이터만 추출하는 방식이에요.
BS4에서 마이그레이션하기
기존 BS4 사용자를 위한 공식 마이그레이션 가이드가 있어요. CSS 셀렉터 문법이 Parsel과 호환되기 때문에 기존 셀렉터를 대부분 그대로 쓸 수 있어요.
언제 Scrapling을 쓰면 좋을까?
Scrapling이 딱인 경우:
- 사이트 구조가 자주 바뀌는 타겟 스크래핑
- Cloudflare 등 안티봇 우회가 필요할 때
- 정적/동적/스텔스를 하나의 코드베이스로 관리하고 싶을 때
- BS4의 속도에 한계를 느낄 때
- AI 에이전트 워크플로우에 웹 데이터 수집 통합
다른 도구가 나을 수 있는 경우:
- 극초보자라면 BS4의 직관적인 API가 학습에 더 적합해요
- Scrapy 미들웨어 생태계가 이미 구축된 프로젝트라면 마이그레이션 비용을 고려하세요
- 웹 → LLM 입력 변환이 주목적이라면 Crawl4AI가 더 적합해요
마무리
솔직히 말하면, Scrapling은 Python 웹 스크래핑에서 "올인원"에 가장 가까운 도구예요.
- 784배 빠른 파싱 속도
- 사이트가 바뀌어도 코드 안 깨지는 적응형 스크래핑
- 안티봇 우회 내장
- Scrapy 스타일 Spider
- AI 에이전트 MCP 서버
기존에 라이브러리 3-4개를 조합하던 작업이 pip install "scrapling[all]" 하나로 끝나요.
한번 시도해보세요. 설치 5분이면 끝나고, 공식 문서도 잘 되어 있어요.
궁금한 점이 있으면 댓글로 남겨주세요!
Top comments (0)