지난주에 세일즈팀 동료 한 명이 비즈니스 디렉터리 페이지 약 200개에서 연락처 정보를 뽑는 일을 도와달라고 했습니다. 그의 계획은? 각 페이지를 하나씩 복사해서 스프레드시트에 붙여 넣는 것. 저는 대신 ChatGPT로 Python 스크래퍼를 만들면 된다고 제안했죠. 20분 뒤 그는 스크립트를 얻었습니다. 그리고 30분 후 제 DM에는 이런 메시지가 와 있었습니다. "처음 다섯 페이지에서는 잘 되다가 그다음부터 그냥… 멈췄어요."
이런 경험은 의외로 흔합니다. ChatGPT는 스크래핑 코드를 정말 잘 써주지만, 항상 그런 건 아닙니다. 게다가 온라인 튜토리얼 대부분은 “봐, 이 장난감 사이트에서는 되잖아” 수준에서 끝나 버려서, JavaScript, 봇 차단 장치, 페이지네이션이 있는 실제 페이지에 부딪히는 순간 막막해지기 쉽습니다. 이 가이드에서는 ChatGPT 웹 스크래핑이 실제로 어떤 모습인지 처음부터 끝까지 살펴보겠습니다. 전체 워크플로우, 재사용 가능한 프롬프트 템플릿 5개(예시 하나가 아니라), 어디서 왜 깨지는지에 대한 솔직한 분석, 그리고 실패했을 때 무엇을 해야 하는지—코드 없이 바로 쓸 수 있는 같은 대안까지 포함해서요.
ChatGPT 웹 스크래핑이란 무엇인가요?
“ChatGPT 웹 스크래핑”은 ChatGPT를 활용해 웹사이트에서 데이터를 추출하도록 돕는 방식을 말합니다. 다만 많은 사람들이 놓치는 중요한 차이가 하나 있습니다. ChatGPT가 스스로 웹사이트를 스크래핑하는 것은 아닙니다. URL에 접속하거나 HTML을 가져오거나, 페이지를 클릭해 넘기지 못합니다. 대신 그런 일을 하는 코드를 생성하거나, 채팅에 붙여 넣은 원시 HTML을 파싱해 구조화된 데이터로 바꿔줄 수는 있습니다.
주요 방식은 크게 두 가지입니다.
- 코드 생성기로서의 ChatGPT: 페이지와 원하는 데이터를 설명하면, ChatGPT가 Python 스크립트(보통 BeautifulSoup, Selenium, Playwright 중 하나 사용)를 작성해 줍니다. 사용자는 이를 자기 컴퓨터에서 실행합니다.
- 데이터 파서로서의 ChatGPT: 원시 HTML을 채팅에 복사해 넣거나(Code Interpreter로 업로드), 필요한 필드를 JSON이나 CSV 형식으로 추출하게 합니다.
두 방식 모두 실제 요청과 실행은 사용자가 합니다. ChatGPT는 손이 아니라 두뇌 역할입니다. 2025년 10월 출시된 최신 ChatGPT Atlas 브라우저처럼 웹을 대화형으로 탐색할 수 있는 기능이 있어도, 결과는 응답 형태로 나오지 500개 상품 행이 들어 있는 구조화된 CSV 테이블을 주지는 않습니다. 즉, 브라우징 보조 도구이지 데이터 추출 파이프라인은 아닙니다.
왜 ChatGPT로 웹 스크래핑을 하나요? 누가 쓰면 좋을까요?
ChatGPT는 웹 스크래핑의 진입 장벽을 크게 낮춰줍니다. 에 따르면 개발자의 가 이미 AI 도구를 업무 흐름에 사용하거나 사용할 계획이며, 그중 ChatGPT의 점유율은 82%로 가장 높습니다. 하지만 “ChatGPT 웹 스크래핑”의 대상은 개발자만이 아닙니다. 영업용 리드 리스트를 만드는 SDR, 경쟁사 가격을 추적하는 이커머스 관리자, 매물 데이터를 모으는 부동산 분석가, 콘텐츠를 수집하는 마케팅팀 모두가 주요 사용자입니다.
대표적인 활용 사례와 수혜 대상을 간단히 보면 다음과 같습니다.
| 활용 사례 | 주요 사용자 | 스크래핑 대상 |
|---|---|---|
| 세일즈 리드 추출 | SDR, 세일즈 운영 | 디렉터리의 이름, 이메일, 전화번호 |
| 경쟁사 가격 모니터링 | 이커머스, 가격 정책팀 | 상품명, 가격, 재고 여부, SKU |
| 시장 조사 | 분석가, 창업자 | 회사 정보, 리뷰, 평점, 기능 목록 |
| 부동산 데이터 수집 | 중개인, 투자자 | 매물 가격, 주소, 침실/욕실 수, 담당자 정보 |
| 콘텐츠 집계 | 마케팅, SEO 팀 | 기사 제목, URL, 발행일, 작성자 |
100개 페이지의 데이터를 수동으로 복사하는 데는 3~5시간이 걸릴 수 있습니다. 하지만 ChatGPT가 생성한 스크립트는 잘만 되면 몇 분이면 같은 작업을 끝냅니다. 그리고 바로 그 “잘만 되면”이 이 글의 핵심입니다.
Gartner는 2026년까지 공식 IT 부서 밖의 개발자가 저코드 도구 사용자의 를 차지할 것으로 전망합니다. 즉, “ChatGPT 웹 스크래핑”을 찾는 사람들은 점점 더 엔지니어를 따로 고용하지 않고도 데이터를 얻고 싶어 하는 비개발자입니다. 이들에게 ChatGPT는 첫 번째 선택지이고, 스크립트가 말을 듣지 않을 때 손이 가는 도구가 Thunderbit입니다.
ChatGPT 웹 스크래핑은 어떻게 작동하나요? 단계별 가이드
실제 비즈니스 디렉터리 목록 페이지를 예로 들어, 장난감 사이트가 아닌 진짜 워크플로우를 끝까지 살펴보겠습니다.
- 난이도: 중급(기본적인 Python 실행이 가능해야 함)
- 소요 시간: 첫 스크래핑 기준 약 15~30분
- 준비물: Chrome 브라우저, Python 환경(Python 3.10+), ChatGPT(무료 플랜 가능), 대상 URL
1단계: 웹사이트를 살펴보고 필요한 데이터를 파악하기
스크래핑할 페이지를 Chrome에서 엽니다. 가져오고 싶은 데이터 하나(예: 회사명)를 오른쪽 클릭한 뒤 검사(Inspect) 를 선택합니다. 그러면 Chrome DevTools가 열리면서 HTML 요소가 강조 표시됩니다.
h2.business-name, span.phone, a.website-link 같은 CSS 선택자를 확인하세요. 선택자가 구체적일수록 ChatGPT가 더 정확한 코드를 만들어냅니다. 그다음 페이지의 구조를 보여줄 대표 HTML 조각(데이터 카드 하나 정도)을 복사해 프롬프트에 붙여 넣습니다.
이제 필드 이름 목록(예: business_name, phone, website_url)과 각각에 대응하는 CSS 선택자를 정리해 두면 됩니다.
2단계: 상세한 ChatGPT 프롬프트 작성하기
대부분의 튜토리얼이 여기서 실패합니다. 너무 두루뭉술한 프롬프트만 던지고 결과를 기대하기 때문이죠. 좋은 스크래핑 프롬프트에는 여섯 가지 요소가 필요합니다.
- 언어와 라이브러리: “BeautifulSoup 4를 사용하는 Python 3.11 스크립트를 작성해 줘.”
- 대상 URL: 스크래핑할 정확한 페이지.
- CSS 선택자: 1단계에서 찾은 각 필드의 선택자.
- 출력 형식: CSV, JSON 또는 둘 다.
- 특수 지시사항: 인코딩, 오류 처리, 지연 시간 등.
- HTML 스니펫: 실제 페이지 HTML 20~40줄을 붙여 넣어 ChatGPT가 구조를 볼 수 있게 함.
아래는 주석이 달린 샘플 프롬프트입니다.
1당신은 시니어 Python 엔지니어입니다. Python 3.11과 BeautifulSoup 4를 사용해 웹 스크래퍼를 작성해 주세요.
2대상 URL: https://example.com/businesses
3목표: 페이지의 모든 비즈니스 카드를 추출해 비즈니스당 한 행씩 반환하기.
4필요한 필드(CSS 선택자 포함):
5- business_name (h2.biz-name)
6- phone (span.phone-number)
7- website_url (a.biz-link, href)
8- rating (div.stars[data-rating])
9출력: UTF-8 인코딩과 헤더 행을 포함한 businesses.csv로 저장.
10요구사항:
11- 실제 사용자 에이전트 헤더가 포함된 requests 사용
12- 누락된 필드는 예외 없이 None으로 처리
13- 마지막에 추출된 비즈니스 수 출력
14- 반복 요청이 있다면 1초 지연 추가
15페이지의 대표 HTML 스니펫(비즈니스 카드 1개):
16<실제 HTML 20~40줄을 여기에 붙여 넣으세요>
팁: HTML 스니펫을 넣는 것이 정확도를 가장 크게 높입니다. ChatGPT는 URL에 직접 접속할 수 없기 때문에, 그 스니펫이 페이지 구조를 판단하는 유일한 기준입니다.
3단계: 생성된 코드를 검토하고 테스트하기
ChatGPT가 준 코드를 그대로 실행하지 마세요. 먼저 읽어 보면서 확인해야 합니다.
- 환각된 선택자: 실제 페이지에 없는 CSS 클래스를 ChatGPT가 만들어내기도 합니다.
- 누락된 라이브러리:
pip install requests beautifulsoup4(또는playwright등)가 필요한지 확인하세요. - 하드코딩 값: URL, 필드명, 파일 경로가 맞는지 점검하세요.
가상환경을 만들고 의존성을 설치한 뒤, 작은 샘플(1~2페이지)로 먼저 실행합니다. 출력된 CSV를 확인해 보세요. 컬럼이 제대로 채워졌나요? 기대했던 데이터가 비어 있지는 않나요?
4단계: 후속 프롬프트로 보완하기
ChatGPT의 강점은 반복 수정에 있습니다. 첫 번째 스크립트가 1페이지만 가져온다면 이렇게 물어보세요.
“스크립트가 첫 페이지만 스크래핑합니다. 페이지네이션을 추가해서 모든 페이지를 가져오게 해주세요. 사이트는 ?page=1, ?page=2 식으로 구성되어 있습니다. 페이지가 결과를 0개 반환하거나 50페이지를 넘으면 멈추게 해주세요.”
필드가 누락되면 이메일이나 전화번호에 대한 정규식 fallback을 추가해 달라고 요청하세요. 사이트가 JS 중심이라면 Playwright 버전을 요청하면 됩니다. 이런 후속 프롬프트가 이전 코드를 이어받아 개선됩니다. 말하자면, 너무 자신만만한 경우가 가끔 있지만 엄청 빠른 파트너와 짝 프로그래밍하는 셈입니다.
웹 스크래핑용 ChatGPT 프롬프트 템플릿 5가지
이런 구성을 제대로 정리한 가이드는 거의 못 봤습니다. 저는 시나리오별로 다섯 가지 프롬프트 템플릿을 직접 만들고, 테스트하고, 다듬었습니다. 그대로 복사한 뒤 URL과 HTML 스니펫만 바꾸면 ChatGPT가 바로 쓸 만한 코드를 내놓을 가능성이 높습니다.
템플릿 1: 목록 페이지 스크래퍼(상품 카탈로그, 디렉터리)
사용 시점: 상품, 비즈니스, 채용 공고처럼 항목이 많은 페이지에서 각 항목당 한 행이 필요할 때.
1당신은 시니어 Python 엔지니어입니다. Python 3.11과 BeautifulSoup 4를 사용해 웹 스크래퍼를 작성해 주세요.
2대상 URL: [YOUR URL]
3목표: 페이지의 모든 아이템 카드를 추출해 아이템당 한 행씩 반환하기.
4필요한 필드(CSS 선택자 포함 — Inspect로 확인한 값):
5- [field_1] ([selector_1])
6- [field_2] ([selector_2])
7- [field_3] ([selector_3])
8- [field_4] ([selector_4, 필요한 경우 attribute 포함])
9출력: UTF-8 인코딩과 헤더 행을 포함한 items.csv로 저장.
10요구사항:
11- 실제 사용자 에이전트 헤더가 포함된 requests 사용
12- 누락된 필드는 예외 없이 None으로 처리
13- 마지막에 추출된 아이템 수 출력
14- 반복 요청이 있다면 1초 지연 추가
15페이지의 대표 HTML 스니펫(아이템 카드 1개):
16[실제 HTML 20~40줄을 여기에 붙여 넣으세요]
예상 결과: 필드명과 일치하는 컬럼을 가진 CSV 파일이 아이템당 한 행씩 생성됩니다.
템플릿 2: 상세/서브페이지 스크래퍼(개별 상품 또는 프로필 페이지)
사용 시점: 풍부한 정보가 담긴 단일 페이지(상품 페이지, 인물 프로필, 부동산 매물 등)에서 모든 정보를 하나의 구조화된 레코드로 뽑고 싶을 때.
1상세 페이지 URL을 입력받아 다음 키를 가진 dict를 반환하는 Python 함수 `scrape_detail(url)`을 작성해 주세요.
2- [field_1]
3- [field_2]
4- [field_3]
5- [field_4]
6- [field_5]
7BeautifulSoup를 사용하세요. 누락된 필드는 모두 예외 없이 None으로 처리해 주세요.
8이메일과 전화번호에 대한 정규식 fallback도 포함해 주세요. 모든 페이지가 일관된 태그로 감싸는 것은 아니기 때문입니다.
9dict를 반환하는 동시에 details.csv에 한 행씩 추가해 주세요(첫 호출 시 헤더 포함해 파일 생성).
10실제 상세 페이지의 HTML 스니펫:
11[상세 페이지 HTML 40~60줄을 여기에 붙여 넣으세요]
예상 결과: 페이지마다 dict 하나가 나오고, 상세 페이지가 추가될 때마다 CSV도 함께 커집니다.
템플릿 3: 동적/JS 렌더링 페이지 스크래퍼(Playwright)
사용 시점: 페이지가 JavaScript로 콘텐츠를 불러오는 경우(React, Angular 등). 소스 HTML이 비어 있는 <div id="root">만 보일 때.
1JavaScript로 렌더링되는 페이지를 위한 Playwright(sync API) 기반 Python 웹 스크래퍼를 작성해 주세요.
2대상 URL: [YOUR URL]
3목표: 페이지가 동적으로 로드된 뒤 나타나는 모든 결과 카드를 추출하기.
4요구사항:
5- 콘텐츠가 로드될 때까지 `page.wait_for_selector('[YOUR CARD SELECTOR]', timeout=15000)`를 사용
6- 지연 로딩 결과를 트리거하기 위해 1초 간격으로 페이지 하단까지 두 번 스크롤
7- 각 카드에서 [field_1], [field_2], [field_3], [field_4] 추출
8- 결과를 dict 리스트 형태로 results.json에 UTF-8로 저장
9- 처음에는 headless=False로 실행해 화면을 볼 수 있게 하고, 종료 전 마지막에 2초 멈춤 추가
10requests나 BeautifulSoup는 사용하지 말고, Playwright만 사용해 주세요.
예상 결과: 각 결과 카드당 하나의 객체가 들어 있는 JSON 파일이 만들어지고, 모든 필드가 채워집니다.
템플릿 4: 페이지네이션 처리기(다중 페이지 스크래핑)
사용 시점: 이미 단일 페이지 스크래퍼가 있고, 이제 모든 페이지를 순회해야 할 때.
1아래의 기존 BeautifulSoup 스크래퍼를 페이지네이션 루프로 감싸서, 1페이지만이 아니라 모든 페이지를 수집하도록 바꿔 주세요.
2사이트는 URL 파라미터 페이지네이션을 사용합니다: ?page=1, ?page=2, 등.
3종료 조건: 현재 페이지의 아이템 수가 0개가 되거나, 응답 상태 코드가 200이 아니거나, 100페이지에 도달하면 중단(안전장치)합니다.
4다음을 추가해 주세요:
5- 페이지 요청 사이에 1.5초의 예의 있는 지연
6- 각 요청을 try/except로 감싸 에러를 기록하고 계속 진행
7- 5페이지마다 진행 상황 출력: "Page 15 → 300 items so far"
8- 최종 저장 파일은 items_all.csv
9기존 스크래퍼:
10[현재 사용 중인 단일 페이지 스크래퍼를 여기에 붙여 넣으세요]
예상 결과: 모든 페이지의 아이템이 들어 있는 하나의 CSV와 함께, 콘솔에 진행 상황이 표시됩니다.
템플릿 5: 데이터 정리 및 구조화(“HTML 붙여넣기” 방식)
사용 시점: 원시 HTML이 이미 있고(curl로 받았거나, 브라우저에서 복사했거나, 파일로 저장했거나), ChatGPT가 이를 깔끔한 구조화 데이터로만 바꿔 주길 원할 때—코드는 필요 없을 때.
1제품 상세 페이지의 원시 HTML을 붙여 넣을 예정입니다. 코드는 작성하지 말고, 아래 스키마에 맞는 JSON 객체로 추출 데이터만 반환해 주세요.
2{
3 "name": string,
4 "brand": string,
5 "price": number,
6 "currency": string (ISO 4217),
7 "availability": "in_stock" | "out_of_stock" | "preorder" | "unknown",
8 "rating": number (0-5) or null,
9 "review_count": integer or null,
10 "description": string (최대 500자),
11 "key_specs": [{"name": string, "value": string}]
12}
13정말 찾을 수 없는 값은 null로 처리해 주세요 — 절대 임의로 지어내지 마세요.
14JSON 객체만 반환하고, 설명 문장이나 마크다운 코드 블록은 포함하지 마세요.
15HTML:
16[전체 페이지 HTML을 여기에 붙여 넣으세요]
예상 결과: 스프레드시트나 데이터베이스에 바로 넣을 수 있는 JSON 객체 하나가 반환됩니다.
ChatGPT 웹 스크래핑이 깨지는 지점(솔직한 한계)
대부분의 튜토리얼은 이 부분을 완전히 건너뜁니다. 저는 ChatGPT가 만든 스크래퍼를 디버깅할 만큼 충분히 써 봤고, 어디서 무너지는지 정확히 알고 있습니다. 도 개발자의 단 만이 AI 출력 결과를 “매우 신뢰한다”고 답했다고 보여줍니다. 이유가 있습니다.
JavaScript 중심의 동적 웹사이트
웹사이트의 이 클라이언트 측 기능에 JavaScript를 사용합니다. React만 해도 이제 전체 웹사이트의 7.2%에서 돌아가며, 1년 만에 했습니다. ChatGPT에게 “이 페이지를 스크래핑해 줘”라고 하면 기본 출력은 대개 requests + BeautifulSoup 스크립트입니다. 이 스크립트는 원시 HTML을 가져오는데, React나 Angular 사이트의 원시 HTML은 종종 비어 있는 <div id="root">뿐입니다. 실제 데이터는 JavaScript 실행 후에 로드되지만, requests는 그 과정을 수행하지 못합니다.
ChatGPT는 요청하면 Selenium이나 Playwright 코드를 생성할 수는 있습니다. 하지만 그런 스크립트는 느리고(Playwright는 페이지 로드당 평균 , 정적 requests는 그보다 훨씬 빠름) 대기 조건, 스크롤 트리거, 잘못 추측한 요소 선택자 때문에 자주 디버깅이 필요합니다.
봇 차단과 CAPTCHA
Cloudflare는 전체 웹사이트의 약 를 보호하고 있으며, DataDome 같은 서비스는 를 주장합니다. Python 사용자 에이전트로 보내는 단순한 requests.get()은 말 그대로 전형적인 봇 패턴입니다. ChatGPT가 생성한 스크립트에는 프록시 로테이션도, TLS 지문 위장도, 쿠키 처리도, CAPTCHA 해결도 없습니다. 상업용 사이트에서 기본적인 보호만 있어도 첫 요청에서 막히기 쉽습니다.
페이지네이션과 대규모 스크래핑
ChatGPT의 기본 페이지네이션 루프는 ?page=N을 돌거나 .next 버튼을 클릭하는 방식입니다. 실제 사이트는 커서 기반 페이지네이션, IntersectionObserver를 사용한 무한 스크롤, GraphQL 호출을 쓰기도 합니다. 정확한 네트워크 호출을 보여주지 않는 한 ChatGPT는 이런 구조에 맞는 코드를 제대로 만들기 어렵습니다. 보여줘도 루프가 취약한 경우가 많습니다. 와 모두 페이지네이션을 예시 스크래퍼가 두 번째 또는 세 번째 프롬프트를 필요로 하는 가장 흔한 지점으로 지적합니다.
지속적이고 예약된 스크래핑
ChatGPT가 주는 것은 1회용 스크립트입니다. 스케줄러도 없고, 변경 감지도 없고, 알림도 없습니다. “경쟁사 가격을 매일 아침 확인”하고 싶다면 cron, Airflow, Lambda 같은 걸 배워야 하는데, 초기 응답에는 이런 내용이 포함되지 않습니다. 반복적으로 데이터를 받아야 하는 비즈니스 사용자에게는 여기서 막다른 길이 됩니다.
속도와 비용 문제
JavaScript가 많은 사이트에서는 Selenium이나 Playwright를 쓰더라도 실제 페이지당 시간이 이상적인 조건에서도 3~10초 정도 걸리고, 재시도나 봇 대기까지 들어가면 페이지당 40~60초까지 늘어날 수 있습니다. 이는 포럼과 튜토리얼에서 불만입니다.
HTML을 파싱하기 위해 ChatGPT API를 사용하는 경우(대규모 “HTML 붙여넣기” 방식), 토큰 비용이 빠르게 누적됩니다. 현재 GPT-4o 가격 기준(~$2.50/M 입력 토큰, $10/M 출력 토큰), 상품 페이지 1,000개를 파싱하는 데 토큰만 약 $95~$105 정도 듭니다. GPT-4o mini를 쓰면 같은 양을 약 $6.50에 처리할 수 있습니다. 여기에 프록시 비용($3~10/GB), 로컬 크롤러 유지보수, 개발자 시간이 더해지면 “그냥 ChatGPT 쓰자”는 접근이 점점 비싸 보이기 시작합니다.
| 규모 | GPT-4o 토큰 비용(추정) | GPT-4o Mini 토큰 비용(추정) |
|---|---|---|
| 100페이지 | 약 $9.55 | 약 $0.65 |
| 1,000페이지 | 약 $95.50 | 약 $6.50 |
| 10,000페이지 | 약 $955 | 약 $65 |
추정치는 페이지당 약 5만 입력 토큰과 2천 출력 토큰을 가정합니다. 실제 비용은 페이지 크기와 출력 복잡도에 따라 달라집니다.
ChatGPT 웹 스크래핑 vs 노코드 AI 스크래퍼 vs 커스텀 코드: 선택 기준
모든 스크래핑 작업에 같은 도구가 필요한 것은 아닙니다. Thunderbit에서 실제 프로젝트를 기준으로 세 가지 접근법을 시험해 보며 사용해 온 판단 기준은 다음과 같습니다.
| 상황 | ChatGPT + Python | 노코드 AI 스크래퍼(예: Thunderbit) | 커스텀 코드 + 프록시 |
|---|---|---|---|
| 단순 정적 페이지 | ✅ 매우 좋음 — 빠르게 생성 | ✅ 가능하지만 과할 수 있음 | ⚠️ 지나치게 복잡함 |
| JS 렌더링 / 동적 콘텐츠 | ⚠️ Selenium/Playwright 필요 — 자주 깨짐 | ✅ 브라우저/클라우드 스크래핑으로 처리 | ✅ 완전한 제어 가능 |
| 봇 차단 / CAPTCHA 사이트 | ❌ ChatGPT는 CAPTCHA를 풀 수 없음 | ✅ 클라우드 스크래핑 인프라가 많은 경우 처리 | ✅ 프록시 로테이션으로 가능 |
| 페이지네이션(100페이지 이상) | ⚠️ 루프가 취약하고 디버깅 필요 | ✅ 내장 페이지네이션 지원 | ✅ 엔지니어링으로 견고하게 구현 가능 |
| 비개발자 사용자 | ❌ Python 지식 필요 | ✅ 2번 클릭으로 코드 불필요 | ❌ 코딩 필요 |
| 지속적/예약 스크래핑 | ❌ 수동 재실행 | ✅ 예약 스크래퍼 기능 | ✅ cron/오케스트레이션으로 가능 |
| Sheets/Airtable/Notion으로 내보내기 | ⚠️ 추가 코드 필요 | ✅ 기본 원클릭 내보내기 | ⚠️ 추가 연동 코드 필요 |
짧게 정리하면: ChatGPT는 빠른 일회성 스크립트와 학습용으로 좋습니다. 반복적이고 운영 수준의 스크래핑, 특히 비개발자라면 Thunderbit 같은 노코드 도구가 더 빠르고 안정적이며 유지보수가 필요 없습니다. 엔터프라이즈 규모의 엔지니어링 프로젝트라면 커스텀 코드와 프록시 인프라가 가장 큰 제어권을 줍니다.
노코드 대안: Thunderbit이 코드 없이 웹 스크래핑을 처리하는 방법
코드를 전혀 쓰지 않는 독자, 혹은 ChatGPT 스크립트 디버깅에 밤을 너무 많이 써 버린 사람이라면 완전히 다른 길이 있습니다. ChatGPT는 코드를 생성합니다. 는 그 단계를 건너뜁니다.
저는 Thunderbit 팀에서 일하고 있어서 이 부분은 솔직히 밝힙니다. 하지만 실제로도 이 방식이 대부분의 비즈니스 사용자에게는 가장 빠른 길이라고 믿습니다. 워크플로우는 다음과 같습니다.
AI 필드 제안: 어떤 페이지든 데이터 구조를 자동 인식
웹페이지를 열고 을 클릭한 뒤 “AI Suggest Fields”를 누르세요. Thunderbit의 AI는 JavaScript로 불러온 콘텐츠까지 포함한 렌더링된 페이지를 읽고, 컬럼명과 데이터 유형을 제안합니다. Inspect도, CSS 선택자도, 프롬프트 엔지니어링도 필요 없습니다. 그다음 “Scrape”를 클릭하면 됩니다.
ChatGPT 방식과 비교해 보면: DevTools 열기 → 선택자 찾기 → 프롬프트 작성 → 코드 검토 → 의존성 설치 → 스크립트 실행 → 결과 확인 → 반복 수정. Thunderbit은 이 모든 과정을 두 번 클릭으로 압축합니다.
서브페이지 스크래핑으로 목록을 자동 보강
목록 페이지를 스크래핑한 뒤 “Scrape Subpages”를 클릭하면 Thunderbit이 각 행의 상세 페이지를 방문해 이메일, 전화번호, 소개문 같은 추가 필드를 기존 테이블에 덧붙입니다. ChatGPT로 하려면 별도의 스크립트, 루프, 각 서브페이지의 오류 처리, 그리고 데이터를 합치는 로직이 필요합니다. Thunderbit은 한 번에 처리합니다.
어디로든 내보내기: Google Sheets, Airtable, Notion, Excel
Thunderbit은 CSV만이 아니라 Google Sheets, Airtable, Notion, Excel로의 무료 원클릭 내보내기를 제공합니다. 반면 ChatGPT가 생성한 스크립트는 보통 로컬 CSV나 JSON 파일만 씁니다. Sheets나 Airtable로 데이터를 보내려면 추가 라이브러리와 인증 코드가 필요합니다.
클라우드 스크래핑 vs 브라우저 스크래핑
Thunderbit에는 두 가지 모드가 있습니다. 클라우드 스크래핑은 Thunderbit 서버에서 실행되며 배치당 약 50페이지를 처리하고, 공개 사이트에 빠릅니다. 브라우저 스크래핑은 로그인 세션을 그대로 사용해 접근 제한이 있는 페이지나 로그인 보호 페이지를 처리합니다. ChatGPT로 하려면 코드에서 프록시, 쿠키, 세션 처리를 직접 설정해야 하는데, 각각이 별도의 디버깅 모험이 됩니다.
내부적으로 Thunderbit은 ChatGPT, Gemini, Claude 등 여러 AI 모델을 경유해 페이지를 시각적으로 읽고 무엇을 추출할지 판단합니다. 즉, Thunderbit은 사실상 ChatGPT를 포함해 다른 최첨단 모델까지 함께 쓰면서, 요청, 렌더링, 봇 차단, 페이지네이션, 내보내기를 대신 처리해 주는 셈입니다.
실제 활용 사례: 세일즈, 이커머스, 부동산
대부분의 ChatGPT 스크래핑 튜토리얼은 “Books to Scrape” 같은 장난감 사이트를 예로 듭니다. 여기서는 실제 비즈니스 스크래핑이 어떤 모습인지, ChatGPT 방식과 Thunderbit 간편화 방식 둘 다 살펴보겠습니다.
비즈니스 디렉터리에서 세일즈 리드 추출
상황: 아웃바운드 세일즈를 위해 비즈니스 디렉터리에서 이름, 이메일, 전화번호가 필요합니다.
ChatGPT 방식: 템플릿 1(목록 페이지)로 디렉터리를 스크래핑한 뒤, 템플릿 2(상세 페이지)로 각 프로필에 들어가 연락처 정보를 가져옵니다. 이메일과 전화번호에 대한 정규식 fallback, 예의 있는 지연, 중복 제거가 필요합니다. 세팅과 디버깅에 30~60분 정도 예상하세요.
Thunderbit 방식: 디렉터리를 열고 “AI Suggest Fields”를 클릭해 목록을 스크래핑한 뒤, “Scrape Subpages”로 각 프로필의 연락처 상세를 가져옵니다. CRM에 바로 넣을 수 있는 스프레드시트로 내보내면 끝. 총 소요 시간은 약 3분입니다. Thunderbit의 기본 가 파싱을 자동으로 처리합니다.
이커머스 경쟁사 가격 모니터링
상황: 경쟁사의 상품 가격, 재고 여부, SKU를 주간 단위로 추적하고 싶습니다.
ChatGPT 방식: 템플릿 1로 스크래퍼를 만들고, 템플릿 4로 페이지네이션을 추가한 뒤, 매주 수동으로 실행합니다. 경쟁사가 페이지 레이아웃을 바꾸면 선택자가 깨지고 처음부터 다시 시작해야 합니다.
Thunderbit 방식: 한 번 스크래퍼를 설정한 뒤, Thunderbit의 예약 클라우드 스크래핑으로 매일 또는 매주 자동 실행하고 Google Sheets로 내보냅니다. 실행할 때마다 AI가 페이지 구조를 다시 읽기 때문에 레이아웃이 바뀌어도 문제를 크게 일으키지 않습니다. 이 워크플로우에 대한 자세한 내용은 를 참고하세요.
부동산 매물 데이터 수집
상황: 매물 사이트에서 가격, 주소, 침실/욕실 수, 담당자 정보를 수집해야 합니다.
ChatGPT 방식: 대부분의 부동산 사이트(Zillow 스타일)는 React SPA이고 봇 차단도 강력합니다. requests + BeautifulSoup 스크립트는 빈 페이지만 가져오고, Playwright 버전도 몇 분 안에 rate limit에 걸립니다.
Thunderbit 방식: AI 필드 감지가 포함된 클라우드 스크래핑이 JavaScript 렌더링을 처리하고 레이아웃 변경에도 적응합니다. 부동산 포털은 자주 개편되지만, Thunderbit의 AI는 매번 새로 페이지를 읽기 때문에 선택자를 업데이트할 필요가 없습니다. 자세한 과정은 를 참고하세요.
일회성 스크래핑을 넘어서: ChatGPT API 파이프라인 vs Thunderbit Extract API
스크래핑을 제품이나 파이프라인에 통합하려면 질문이 달라집니다. ChatGPT API로 HTML을 파싱할 것인가, 아니면 스크래핑 전용 API를 쓸 것인가?
ChatGPT API로 HTML 파싱하기
방식은 이렇습니다. 로컬 크롤러(requests, Playwright)로 HTML을 가져온 뒤 OpenAI API에 보내 구조화된 JSON을 추출합니다. 규모가 큰 “HTML 붙여넣기” 우회 방식이라고 볼 수 있습니다.
작동은 합니다. 하지만 비용과 유지보수 부담은 현실적입니다. GPT-4o 가격 기준으로 1,000페이지는 토큰 비용만 약 $95입니다. 크롤러, 프록시, 프롬프트 엔지니어링, 출력 스키마까지 모두 직접 관리해야 합니다. 사이트가 바뀌면 프롬프트가 깨지고 다시 조정해야 합니다.
Thunderbit Extract API: 구조화된 웹 데이터를 위해 설계된 API
Thunderbit의 는 다른 방식을 제공합니다. JSON Schema를 정의하고 URL을 POST하면 구조화된 데이터를 돌려받습니다. JavaScript 렌더링과 봇 차단 처리가 내장되어 있습니다. 배치 처리도 요청당 최대 100개의 URL을 지원합니다.
| 기능 | ChatGPT API + 커스텀 코드 | Thunderbit Extract API |
|---|---|---|
| 구조화 출력 | 프롬프트 내 수동 스키마 | JSON Schema 기반 |
| JS 렌더링 | 직접 처리(Playwright 등) | 내장됨(다중 렌더 모드) |
| 봇 차단 / CAPTCHA | 직접 처리(프록시 등) | 자동 처리 |
| 배치 처리 | 루프를 직접 구현 | 배치 엔드포인트(최대 100 URL) |
| 유지보수 | 프롬프트와 코드가 쉽게 망가짐 | 관리형 AI 엔진 |
구조화된 웹 데이터를 서비스처럼 쓰되 스크래핑 파이프라인을 직접 유지보수하고 싶지 않은 팀에게는 Thunderbit API가 프로덕션에 더 빠르게 도달하는 길입니다. 추출당 크레딧 비용은 을 참고하세요.
ChatGPT 웹 스크래핑 결과를 더 잘 얻는 팁
제가 시행착오로 배운 것들입니다.
프롬프트는 구체적으로 쓰세요. 항상 프로그래밍 언어, 라이브러리, 대상 URL, CSS 선택자, 출력 형식, 예외 상황 지시를 포함하세요. 모호한 프롬프트는 모호한 코드를 만듭니다.
URL만 말고 HTML 스니펫을 붙여 넣으세요. ChatGPT는 URL에 직접 방문할 수 없습니다. HTML 스니펫이 페이지 구조에 대한 유일한 진실입니다. 데이터 카드 하나의 20~40줄만 붙여도 정확도가 크게 올라갑니다.
ChatGPT에게 린트와 최적화를 시키세요. 스크립트를 만든 뒤 “이 코드를 검토해서 오류를 잡고, 에러 처리를 추가하고, 성능을 최적화해 줘”라고 요청해 보세요. 두 번째 패스에서 자기 실수를 꽤 잘 잡아냅니다.
항상 작은 샘플부터 테스트하세요. 1~2페이지로 먼저 실행한 뒤 확장하세요. 1페이지에서 깨진 선택자를 잡아내면 500번의 실패 요청 후에 발견하는 일을 막아줍니다.
처음부터 다시 하지 말고 반복하세요. 첫 스크립트가 80% 맞다면, 결과를 다시 붙여 넣고 나머지 20%를 고치게 하세요. ChatGPT는 반복 대화에서 가장 강합니다.
ChatGPT 웹 스크래핑의 윤리와 법적 고려사항
법적인 측면도 중요하므로 간단히 정리하겠습니다.
현재 미국 판례 기준으로, 공개적으로 접근 가능한 데이터를 스크래핑하는 것은 연방법상 컴퓨터 범죄가 아닙니다. 판결이 이를 확립했고, (2024년 1월)도 이를 뒷받침했습니다. 판사는 Facebook과 Instagram의 공개 로그인 아웃 데이터를 스크래핑한 것이 Meta의 이용약관을 위반하지 않는다고 봤습니다. 계정이 없는 방문자는 그 약관에 구속되는 “사용자”가 아니기 때문입니다.
다만 로그인이나 인증이 필요한 데이터, 또는 이용약관에 동의한 뒤 이를 위반하는 스크래핑은 여전히 법적 위험을 만들 수 있습니다. 또한 이메일이나 전화번호처럼 개인 데이터를 스크래핑하는 경우, 데이터의 출처와 관계없이 EU 및 캘리포니아의 개인정보 보호법(GDPR, CCPA)이 적용됩니다.
스크래핑 전에는 항상 robots.txt와 이용약관을 확인하세요. 요청 속도를 존중하고, 개인 데이터를 책임감 있게 다루세요. 그리고 내장된 준수 기능이 있는 도구를 사용하세요. 예를 들어 Thunderbit는 robots.txt를 존중하고 책임 있는 데이터 관행을 기본으로 제공합니다. 더 자세한 내용은 를 참고하세요.
ChatGPT를 웹 스크래핑에 언제 써야 하고, 언제 더 나은 도구를 찾아야 하나요?
ChatGPT는 웹 스크래핑에 정말 강력한 도구입니다. 빠른 프로토타입을 만들고 스크래핑이 내부적으로 어떻게 동작하는지 배우는 데 특히 좋습니다. 단순한 정적 페이지에서 한 번만 실행할 스크립트라면 대체하기 어렵습니다.
하지만 운영 수준, 반복 실행, 대규모 스크래핑이 필요하고 특히 개발자가 아니라면, Thunderbit 같은 목적 특화 도구가 더 빠르고 안정적이며 유지보수도 필요 없습니다. 엔터프라이즈 규모의 엔지니어링 프로젝트라면 프록시 인프라를 갖춘 커스텀 코드가 완전한 제어권을 줍니다.
제가 쓰는 선택 기준은 다음과 같습니다.
- 빠른 일회성 작업, 학습, 프로토타이핑: ChatGPT + Python
- 비개발자, 노코드, 반복 스크래핑:
- 개발자 파이프라인, 구조화된 API 접근:
- 엔터프라이즈 규모, 완전한 제어: 커스텀 코드 + 프록시 + 오케스트레이션
노코드 방식을 시험해 보고 싶다면 Thunderbit은 무료 플랜을 제공하므로 작은 규모에서 직접 결과를 확인해 볼 수 있습니다. 그리고 도구가 실제로 어떻게 동작하는지 보고 싶다면, 에서 다양한 사용 사례별 가이드를 확인할 수 있습니다.
자주 묻는 질문
ChatGPT가 정말 혼자서 웹사이트를 스크래핑할 수 있나요?
아니요. ChatGPT는 스크래핑 코드를 생성하거나 사용자가 제공한 HTML을 파싱할 수는 있지만, URL에 접속하거나 페이지를 가져오거나 스크립트를 실행하지는 못합니다. 2025년 10월 출시된 내장 브라우저인 ChatGPT Atlas 역시 대화형 브라우징 보조 도구일 뿐, 500행짜리 CSV를 구조화해서 내주지는 않습니다.
ChatGPT 웹 스크래핑은 무료인가요?
ChatGPT 무료 플랜으로 스크래핑 코드를 생성하는 것은 비용이 들지 않습니다. 하지만 코드를 실행하려면 Python과 라이브러리가 필요하고(이 역시 무료), OpenAI API로 HTML을 대량 파싱하면 토큰 비용이 발생합니다. GPT-4o mini 기준 1,000페이지당 약 $6.50, GPT-4o 기준 약 $95 정도를 예상할 수 있습니다. 프록시와 인프라는 별도입니다.
ChatGPT가 생성한 웹 스크래퍼에 가장 좋은 Python 라이브러리는 무엇인가요?
정적 HTML 페이지라면 requests와 BeautifulSoup 조합이 가장 간단하고 빠릅니다. JavaScript로 렌더링되는 페이지라면 Playwright가 현대적인 선택입니다. Selenium보다 빠르고(페이지 로드당 약 2.9초 vs. 4.8초) API도 더 깔끔합니다. Selenium은 주로 레거시 프로젝트에 유용합니다.
코딩 없이 ChatGPT로 데이터를 스크래핑할 수 있나요?
직접적으로는 불가능합니다. ChatGPT는 코드를 생성하지만, 실행은 여전히 사용자가 해야 합니다. 완전한 노코드 옵션을 원한다면 같은 도구를 쓰면 두 번 클릭으로 스크래핑할 수 있습니다. Python도, 터미널도, 디버깅도 필요 없습니다. AI가 제안하는 필드, Google Sheets나 Airtable로의 원클릭 내보내기, JS 렌더링과 봇 차단에 대한 내장 처리까지 제공합니다.
ChatGPT가 만든 코드로 웹사이트를 스크래핑하는 것은 합법인가요?
현재 미국 판례 기준으로 공개되고 로그인하지 않은 데이터를 스크래핑하는 것은 일반적으로 합법입니다(hiQ v. LinkedIn, Meta v. Bright Data). 하지만 게이트된 콘텐츠를 스크래핑하거나, 사이트 이용약관을 위반하거나, 이메일·전화번호 같은 개인 데이터를 잘못 다루면 계약법이나 GDPR, CCPA 같은 개인정보 규정상 법적 위험이 생길 수 있습니다. 스크래핑 전에는 항상 robots.txt와 사이트 이용약관을 확인하세요.
더 알아보기