Scrapling: 스스로 복구하는 웹 스크레이퍼

BBetter Stack
Computing/SoftwareSmall Business/StartupsInternet Technology

Transcript

00:00:00이것은 웹 스크래핑의 가장 큰 골칫거리를 해결하려는 파이썬 스크래퍼, Scrapling입니다.
00:00:05오늘 잘 작동하던 스크래퍼가 사이트가 바뀌는 순간 바로 고장 나버리죠. 클래스 이름 하나 바뀌거나,
00:00:10div 하나 이동하거나, 봇 탐지라도 걸리면 데이터 파이프라인은 바로 중단됩니다. Scrapling의 핵심은
00:00:17스크래퍼가 무너지는 대신 스스로 적응할 수 있다는 것입니다. 깃허브에서 53,000개 이상의 스타를 받았고,
00:00:22적응형 파싱, 스텔스 페칭, 대규모 크롤링 워크플로우를 지원합니다.
00:00:27실제로 가장 중요한 질문 하나를 테스트해 보려 합니다.
00:00:30셀렉터를 수정하지 않고도 웹사이트 변경에서 살아남을 수 있을까요? 지금 확인해 보겠습니다.
00:00:40자, Scrapling이란 무엇일까요? Scrapling은 적응형 올인원 파이썬 웹 스크래핑 프레임워크입니다.
00:00:46자가 치유 파서, 스텔스 페처, 자바스크립트가 필요한 경우 브라우저 기반 페칭,
00:00:51그리고 대규모 크롤링을 위한 스파이더 프레임워크를 모두 제공합니다. 한 번의 설치, 하나의 API로 가능하죠. 즉, 더 적게 고장 나고
00:00:57더 많은 유용한 데이터를 얻을 수 있습니다. 이제 정말 중요한 부분을 살펴보죠.
00:01:03워크플로우를 효율적으로 만드는 코딩 도구에 관심이 있다면 구독해 주세요. 새로운 영상이 계속 올라옵니다.
00:01:08여기 기본적인 설정을 준비했습니다. Scrapling은 이미 설치했으니 빠르게 넘어가죠.
00:01:13임포트 한 번과 호출 한 번이면 페이지를 가져올 수 있습니다. 상단에는 변화하는 HTML을 만들어 두었습니다.
00:01:21하나는 일반적인 시작 사이트고, 다른 하나는 내용은 같지만 CSS 셀렉터만 바꿨습니다.
00:01:27상품명과 가격을 가져오고 싶다고 해보죠. 보통은 CSS 셀렉터를 사용해서 가져올 겁니다.
00:01:34page CSS에 셀렉터를 넣고, auto-save를 true로 설정합니다. 이렇게 하면
00:01:40정상적으로 작동해서 데이터 딕셔너리를 돌려줍니다. 평범해 보이죠. 두 개의 셀렉터와 딕셔너리,
00:01:46그냥 넘어가도 될 것 같습니다. 하지만 바로 이 점이 문제입니다. 일반적인 스크래퍼는
00:01:52페이지가 바뀌기 전까지만 잘 작동하니까요. 사이트가 밤사이에 예고 없이 바뀐다면 어떨까요? 리디자인을 하거나,
00:01:58스크래핑을 방해하기 위해 무언가 바꾼다면요. 예를 들어 제품 제목이 'item heading'이 되고 가격이
00:02:04'pricing value'로 바뀐다면요. 데이터는 똑같지만 전체 DOM 구조가 변해버리죠. 예전 셀렉터는
00:02:11이제 쓸모없어집니다. 대부분의 스크래퍼는 여기서 멈추죠. 하지만 이제 적응형 모드를 켤 수 있습니다.
00:02:18autosave는 true인 상태에서 adaptive를 true로 바꾸기만 하면 됩니다. 이제 제품 제목을
00:02:26adaptive 모드로 가져올 수 있습니다. 똑같은 데이터죠. 셀렉터를 다시 작성할 필요 없이
00:02:34페이지 구조가 바뀌어도 상관없습니다. 이것이 핵심 아이디어입니다. autosave가 true일 때,
00:02:40Scrapling은 요소에 대한 단서들을 기록합니다. 태그, 속성,
00:02:44부모 및 자식 요소, 주변 텍스트, DOM 위치 및 구조적 형태 등을 기록하죠. 그래서
00:02:50클래스 이름이 바뀌어도 Scrapling은 많은 단서를 가지고 있습니다. 사이트 전체가 그대로일 필요는 없습니다.
00:02:56요소를 다시 인식할 만큼의 구조적 신호만 있으면 됩니다. 바로 이 부분이
00:03:01중요합니다. 실제 스크래퍼가 고장 나는 이유는 전체 리디자인 때문이 아닙니다. 클래스 이름이 바뀌거나,
00:03:06새로운 래퍼가 추가되거나, 레이아웃이 살짝 변하는 등 아주 사소한 이유 때문이죠. 적응형 매칭은 바로 그런 상황을 위한 것입니다.
00:03:13Scrapling에는 정말 중요한 세 가지 핵심 기능이 있습니다. 첫 번째는 방금 보신 적응형 파서입니다.
00:03:18두 번째는 상황에 맞는 다중 페처입니다. plain HTTP 페처는 단순한 웹 페이지에 빠르고,
00:03:25스텔스 페처는 봇 탐지를 우회할 수 있습니다. 다이내믹 페처는 자바스크립트가 많은 사이트를 위해 실제
00:03:32브라우저를 구동합니다. API는 하나로 유지하면서 페처만 바꾸면 됩니다. 세 번째는 스파이더 프레임워크인데,
00:03:39간단한 스크립트가 실제 크롤러로 발전할 때 유용합니다. 비동기 크롤링, 일시 정지 및 재개, 프록시 로테이션, 스트리밍 등을
00:03:46모두 지원합니다. 나중에 추가해야 할 기능들이 이미 다 포함되어 있죠. Scrapling은 단순한
00:03:53파서가 아닙니다. Requests, BeautifulSoup, Playwright, 재시도 로직, 프록시 헬퍼 등을
00:04:00하나의 워크플로우로 대체합니다. Scrapling이 BeautifulSoup이 쓸모없다거나
00:04:06Playwright나 Scrapy가 죽었다고 말하는 건 아닙니다. BeautifulSoup과 Requests는 여전히 단순한 페이지에는 최고입니다. 쉽고,
00:04:13읽기 편하며 모두에게 익숙하니까요. 하지만 스텔스 기능이 없고,
00:04:20적응형 셀렉터도 없으며, 자바스크립트도 렌더링 하지 않습니다. 대규모 작업에서는
00:04:26병목 현상이 생길 수 있죠. Scrapy는 강력합니다. 본격적인 크롤링
00:04:31인프라를 구축한다면 Scrapy는 여전히 존중받아야 하지만, 설정, 파이프라인, 미들웨어,
00:04:36확장 등 설정할 게 너무 많습니다. Playwright와 Selenium은 실제 브라우저가 필요할 때 훌륭합니다.
00:04:42어떤 페이지는 자바스크립트가 꼭 필요하죠. 하지만 브라우저는 무겁습니다. Raw HTTP보다
00:04:48느리고 메모리도 많이 차지하죠. 게다가 셀렉터 고장 문제를 해결해주지 않습니다. 페이지를 띄울 뿐,
00:04:54데이터의 의미는 이해하지 못하니까요. 그래서 Scrapling을 사용하면,
00:05:01상황에 따라 빠른 페칭, 스텔스 기능, 브라우저 렌더링, 그리고 적응형 파싱을 조합해서 사용할 수 있습니다.
00:05:06이렇게 하면 프론트엔드 변경에 모든 작업이 망가지지 않죠. 물론 Scrapling도 완벽하진 않습니다.
00:05:12데이터 DOM 수준의 보호나, 고급 핑거프린팅,
00:05:17강력한 레이트 리밋에 대응하려면 여전히 좋은 프록시가 필요합니다. Scrapling이
00:05:23도움은 되지만 완벽한 은신을 보장하진 않습니다. 다이내믹 페칭은 브라우저 설정이 복잡해질 수 있는데,
00:05:29자바스크립트 렌더링을 사용할 때의 트레이드오프입니다. 마지막으로 생각해 볼 점이 있습니다.
00:05:34실제 스크래핑 업무를 하거나, 특히 데이터 파이프라인,
00:05:41RAG 작업, AI 에이전트 등 타겟 사이트가 바뀌어도 계속 실행되어야 하는 시스템을 만든다면 Scrapling은 시도해 볼 가치가 있습니다.
00:05:47가장 큰 이유는 스크래핑을 가능하게 해줘서가 아닙니다. 이미 그런 툴은 많으니까요.
00:05:53가장 큰 이유는 유지보수 비용을 줄여준다는 것입니다. 물론 아주 작은 스크립트라면
00:05:59Requests와 BeautifulSoup으로도 충분할 겁니다.
00:06:04이런 코딩 도구에 관심이 있다면 BetterStack 채널을 구독해 주세요. 다음 영상에서 뵙겠습니다.

Key Takeaway

Scrapling은 자동 적응형 파싱과 다중 페처를 결합하여 웹사이트 구조 변화에도 데이터 파이프라인이 중단되지 않도록 유지보수 비용을 최소화하는 올인원 웹 스크래핑 프레임워크입니다.

Highlights

  • Scrapling은 페이지의 클래스명이나 DOM 구조가 변경되어도 기존 셀렉터를 수정하지 않고 데이터를 유지할 수 있는 적응형 파싱 기능을 제공합니다.

  • GitHub에서 53,000개 이상의 스타를 받은 Scrapling은 적응형 파서, 스텔스 페처, 스파이더 프레임워크를 하나의 API로 통합합니다.

  • 자동 저장(autosave) 기능이 활성화되면 태그, 속성, 주변 텍스트, DOM 위치 등 요소에 대한 다각도의 단서를 기록하여 자가 치유를 수행합니다.

  • 단순 페이지에는 빠른 HTTP 페처를, 봇 탐지가 우려되는 경우 스텔스 페처를, 자바스크립트가 필요한 사이트에는 브라우저 기반 다이내믹 페처를 선택하여 사용할 수 있습니다.

  • 비동기 크롤링, 프록시 로테이션, 스트리밍 등 대규모 크롤링 워크플로우에 필요한 기능이 기본적으로 포함되어 있습니다.

  • 데이터 파이프라인이나 AI 에이전트 구축 시 웹사이트 리디자인으로 인해 발생하는 유지보수 비용을 크게 절감합니다.

Timeline

스크래핑의 불안정성과 Scrapling의 등장

  • 웹 사이트의 클래스 이름 변경이나 DOM 구조 변화는 기존 데이터 파이프라인을 즉각 중단시킵니다.
  • Scrapling은 스크래퍼가 무너지는 대신 스스로 적응하여 데이터를 추출할 수 있게 설계되었습니다.

웹 스크래핑 시 봇 탐지나 사소한 레이아웃 변화만으로도 데이터 수집이 실패하는 경우가 많습니다. Scrapling은 이러한 문제를 해결하기 위해 53,000개 이상의 스타를 받은 적응형 파싱 기술을 적용하여 웹사이트 변화에 유연하게 대응합니다.

적응형 파서와 데이터 복구 원리

  • autosave와 adaptive 모드를 활성화하면 CSS 셀렉터가 변경되어도 요소를 다시 인식합니다.
  • 태그, 속성, 부모-자식 관계, 주변 텍스트 등 다양한 구조적 단서를 기록하여 요소를 식별합니다.

대부분의 스크래퍼는 구조가 바뀌면 멈추지만, Scrapling은 적응형 모드를 통해 요소를 식별할 충분한 구조적 신호만 있으면 데이터를 추출합니다. 이는 전체 리디자인이 아니라 클래스명 변경과 같은 사소한 변화에도 스크립트 수정 없이 대응할 수 있게 합니다.

통합 기능 및 도구 간 비교

  • 상황에 따라 HTTP, 스텔스, 다이내믹 페처를 하나의 API로 교체하여 사용 가능합니다.
  • Requests, BeautifulSoup, Playwright 등의 개별 도구를 하나의 워크플로우로 대체합니다.

단순 페이지에는 빠른 속도를, 봇 탐지 시에는 스텔스 기능을, 복잡한 JS 사이트에는 브라우저 렌더링을 활용합니다. 기존 라이브러리들이 가진 셀렉터 고장이나 설정의 복잡함 문제를 하나의 통합된 프레임워크로 해결합니다.

한계 및 도입 고려 사항

  • 고급 핑거프린팅이나 강력한 레이트 리밋 대응을 위해서는 별도의 프록시가 필요합니다.
  • 유지보수 비용 절감이 핵심이며, 데이터 파이프라인이나 AI 에이전트 시스템에 특히 적합합니다.

완벽한 은신을 보장하거나 모든 브라우저 설정을 자동으로 해결하는 것은 아닙니다. 하지만 RAG 작업이나 AI 에이전트처럼 사이트 변경에도 데이터 수집이 계속되어야 하는 시스템 환경에서 유지보수 비용을 획기적으로 줄이는 데 유용합니다.

Community Posts

No posts yet. Be the first to write about this video!

Write about this video