D4Vinci/Scrapling은 요청 한 번부터 사이트 전체 크롤링까지 다루는 파이썬 웹 스크래핑 프레임워크입니다. BSD-3-Clause 라이선스이고, 2026년 11월 7일 기준 깃허브 스타 98,835개, 그 주에만 8,372개가 늘었습니다.
무엇이 다른가
- 적응형 요소 추적: 한 번 찾은 요소를, 사이트 구조가 바뀐 뒤에도 비슷함을 따져 다시 찾습니다. 선택자가 깨질 때마다 고치는 일이 줄어듭니다.
- 한 줄 마크다운:
page.markdown()이 페이지를 LLM이 읽기 좋은 깨끗한 마크다운으로 바꿉니다. 사이트 전체를 마크다운 묶음으로 모으는ContentSpider템플릿도 있습니다. - MCP 서버와 에이전트 스킬: Claude 같은 에이전트가 Scrapling으로 페이지를 읽고, 화면을 찍고, 데이터를 뽑습니다.
- 스파이더: Scrapy와 비슷한 API, 동시 크롤링, 도메인별 속도 조절, Ctrl+C로 멈췄다 이어 하기(
crawldir), JSON·CSV 내보내기.
설치
pip install "scrapling[fetchers]"
scrapling install
pip install scrapling만 하면 파서만 깔립니다. 페이지를 가져오는 Fetcher나 스파이더를 쓰려면 위 두 줄이 필요하고, 두 번째 줄이 브라우저를 받습니다. MCP 서버는 pip install "scrapling[ai]"로 더합니다.
기본 코드
from scrapling.fetchers import Fetcher
page = Fetcher.get('https://quotes.toscrape.com/')
quotes = page.css('.quote .text::text').getall()
print(page.markdown()[:500])
스파이더로 키우면 이렇습니다. README 예시는 명언 10개를 quotes.json에 저장합니다.
from scrapling.spiders import Spider, Response
class QuotesSpider(Spider):
name = "quotes"
start_urls = ["https://quotes.toscrape.com/"]
async def parse(self, response: Response):
for quote in response.css('.quote'):
yield {"text": quote.css('.text::text').get(),
"author": quote.css('.author::text').get()}
result = QuotesSpider().start()
result.items.to_json("quotes.json")
속도
README의 측정(요소 5,000개에서 글자 뽑기, 100회 넘게 잰 평균)입니다. 저장소가 직접 잰 값이라는 점은 감안하세요.
| 라이브러리 | 시간 | Scrapling 대비 |
|---|---|---|
| Scrapling | 1.99ms | 1배 |
| Parsel/Scrapy | 2.06ms | 1.04배 |
| Raw lxml | 2.56ms | 1.29배 |
| BeautifulSoup + lxml | 1,562ms | 약 785배 |
지킬 것
- README의 면책 조항은 교육·연구용이며, 데이터 수집과 개인정보 관련 국내외 법을 지키라고 적었습니다.
- 스파이더의
robots_txt_obey옵션을 켜면 robots.txt의Disallow,Crawl-delay를 따릅니다. 기본은 꺼져 있으니 직접 켜세요. - 사이트 약관이 자동 수집을 막는지 먼저 보세요. 로그인이 필요한 페이지나 개인정보는 긁지 않는 편이 안전합니다.
오늘 할 일
설치 두 줄로 깔고, 즐겨 보는 공개 페이지 하나를 page.markdown()으로 뽑아 보세요. 결과를 Claude에게 붙여 요약을 시키면 쓸모가 바로 보입니다.
쇼츠로 보기
이 글은 비치콤버스 쇼츠 No.47의 짝 글입니다. 짧은 주소 beachcombers.co.kr/s/47.