DEV Community

정상록
정상록

Posted on

Scrapling: BeautifulSoup보다 784배 빠른 Python 웹 스크래핑 프레임워크를 써봤습니다

TL;DR

  • Scrapling은 파싱 속도가 BeautifulSoup4보다 784배 빠르고, 적응형 스크래핑 + 안티봇 우회 + Spider 프레임워크를 하나의 pip install로 해결해요.
  • 기존에 requests + BS4 + Selenium + Scrapy를 조합하던 작업을 단일 라이브러리로 대체할 수 있어요.
  • BSD-3-Clause 라이선스, GitHub Stars 20,000+, Python 3.10+ 지원.

GitHub logo D4Vinci / Scrapling

🕷️ An adaptive Web Scraping framework that handles everything from a single request to a full-scale crawl!

Scrapling Poster
Effortless Web Scraping for the Modern Web

D4Vinci%2FScrapling | Trendshift
العربيه | Español | Français | Deutsch | 简体中文 | 日本語 | Русский
Tests PyPI version PyPI Downloads
Discord X (formerly Twitter) Follow
Supported Python versions

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.
Enter fullscreen mode Exit fullscreen mode

문제: 라이브러리 뷔페가 된 스크래핑 코드

Python으로 웹 스크래핑 해보신 분이라면 공감하실 거예요.

  1. requests로 HTML 받고
  2. BeautifulSoup으로 파싱하고
  3. 동적 페이지가 나오면 Selenium이나 Playwright 꺼내고
  4. 안티봇 걸리면 또 다른 라이브러리 찾고...

라이브러리 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
Enter fullscreen mode Exit fullscreen mode

핵심 기능 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)
Enter fullscreen mode Exit fullscreen mode

TLS 지문 위조와 HTTP/3를 지원해서 기본 봇 탐지도 우회해요.

PlayWrightFetcher — 동적 페이지 렌더링

JavaScript로 콘텐츠를 로딩하는 사이트용이에요.

from scrapling.defaults import PlayWrightFetcher

page = PlayWrightFetcher().fetch(
    'https://google.com',
    disable_resources=True  # 이미지/CSS 비활성화로 속도 향상
)
Enter fullscreen mode Exit fullscreen mode

바닐라, real_chrome, cdp_url, nstbrowser 4가지 모드를 지원해요. 상황에 맞게 골라 쓰면 돼요.

StealthyFetcher — 안티봇 완벽 우회

가장 강력한 계층이에요. Camoufox(수정된 Firefox) 기반으로 최신 안티봇을 자동 우회해요.

from scrapling.defaults import StealthyFetcher

page = StealthyFetcher.fetch(
    'https://protected-site.com',
    headless=True
)
Enter fullscreen mode Exit fullscreen mode

자동으로 처리하는 항목:

  • 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로 바뀌어도 자동으로 찾아냄
Enter fullscreen mode Exit fullscreen mode

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)
Enter fullscreen mode Exit fullscreen mode

일시정지/재개, 동시성 제한, 도메인별 스로틀링, 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]"
Enter fullscreen mode Exit fullscreen mode

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)