GN⁺: GPT-4o를 활용한 웹 스크래핑: 강력하지만, 비용이 많이 듦
(blancas.io)- OpenAI의 새로운 구조화된 출력 기능을 사용하여 AI 지원 웹 스크래퍼를 개발한 경험을 요약한 글
GPT-4o에게 데이터 스크래핑 요청하기
- 첫 번째 실험은 GPT-4o에게 HTML 문자열에서 데이터를 추출하도록 요청
- Pydantic 모델을 사용하여 구조화된 출력을 설정함
from typing import List, Dict class ParsedColumn(BaseModel): name: str values: List[str] class ParsedTable(BaseModel): name: str columns: List[ParsedColumn]
- 시스템 프롬프트는 다음과 같음:
당신은 웹 스크래핑 전문가임. HTML 테이블의 내용을 받아 구조화된 데이터를 추출해야 함
복잡한 테이블 파싱하기
- 간단한 테이블을 실험한 후, Weather.com의 10일간의 날씨 예보와 같은 복잡한 테이블을 테스트함
- GPT-4o는
Day/Night
열을 추가하여 데이터를 정확히 파싱함 -
Condition
열이 웹사이트에서 보이지 않아 Hallucination인 줄 알았으나, 소스 코드를 검사해보니 존재하는 태그였음
결합된 행이 모델을 망가뜨림
- Wikipedia의 간단한 테이블(Human Development Index)을 테스트했으나, 결합된 행 때문에 모델이 실패함
- 시스템 프롬프트를 수정해보았으나 효과가 없었음
GPT-4o에게 XPath 반환 요청하기
- OpenAI API 호출 비용을 줄이기 위해, 파싱된 데이터 대신 XPath를 반환하도록 요청함
- 그러나, 모델이 잘못된 XPath를 반환하거나 데이터를 반환하지 않는 경우가 많았음
두 접근법 결합하기
- 데이터를 추출한 후, 이를 참조하여 XPath를 요청하는 접근법을 시도함
- 이 방법이 더 나은 결과를 제공했으나, 이미지가 텍스트로 변환되는 문제 발생
GPT-4o는 매우 비쌈
- GPT-4o를 사용한 스크래핑은 비용이 많이 듦
- HTML 문자열에서 불필요한 데이터를 제거하는 클린업 로직을 추가하여 비용을 절감함
결론 및 데모
- GPT-4o의 데이터 추출 품질에 놀랐으나, 비용 문제로 실망함
- Streamlit을 사용한 간단한 데모를 제공함
- 더 많은 실험을 통해 개선할 부분이 많음
GN⁺의 정리
- 이 글은 AI를 사용한 웹 스크래핑의 가능성과 한계를 탐구함
- GPT-4o의 구조화된 출력 기능을 활용하여 복잡한 테이블 데이터를 정확히 추출할 수 있음을 보여줌
- 비용 문제와 일부 기술적 한계가 존재하지만, AI 지원 웹 스크래핑 도구의 잠재력을 확인할 수 있음
- 비슷한 기능을 제공하는 다른 프로젝트로는 BeautifulSoup, Scrapy 등이 있음
Hacker News 의견
-
HTML을 간단한 형식(예: markdown)으로 변환한 후 LLM에 전달하는 것이 성공적이었음
- Extractus와 dom-to-semantic-markdown을 사용해 봄
- 내부적으로 Apify와 Firecrawl을 사용하여 Magic Loops를 클라우드에서 실행함
- Chrome Extension에서는 dom-to-semantic-markdown을 사용함
- 사용자 지원 흐름을 통해 특정 요소를 추출하는 방법을 탐구 중임
- 문제를 단순화하여 GPT-4o mini에서도 성공을 거둠
-
구조화된 콘텐츠(예: 항목 목록, 간단한 테이블)에는 LLM이 필요하지 않음
- 웹 스크래퍼를 AI로 초기 버전을 만들었으나, 요소 속성과 위치 기반의 휴리스틱이 더 빠르고 저렴하며 정확했음
- 대부분의 웹사이트에서는 비AI 접근 방식이 매우 잘 작동함
- AI가 정말 필요한지 확인해야 함
-
글 작성자가 99%의 작업을 완료하고 나머지 1%를 위해 ollama를 다운로드하여 테스트하지 않은 것이 놀라움
- 7B 또는 30B 모델이 이 경우에 잘 작동할 수 있음
- GPT-4o가 필요하지 않음
-
페이지의 스크린샷을 찍고 필요한 부분을 잘라내어 GPT에 전달하는 방법을 사용함
- 다양한 공급업체의 가격 비교를 위해 수동으로 작업해야 할 때 유용함
- 비용이 많이 들 수 있지만, 실제 사람보다 저렴하고 더 의미 있는 작업을 할 수 있게 함
-
OpenAI가 최근 Batch API를 발표함
- 모든 프롬프트를 준비한 후 배치로 실행할 수 있음
- 비용이 절반으로 줄어듦
- 비실시간 애플리케이션에 유용함
-
HTML 예제를 제공하고 beautifulsoup 코드 스니펫을 요청하는 방법이 효과적이었음
- 스크래핑하려는 구조가 동일하게 유지됨
- LLM을 실제 파싱에 사용하는 것은 과도하며 결과가 왜곡될 위험이 있음
-
"html reducer"가 있는지 궁금함
- 페이지 소스의 90%가 불필요한 토큰임
- dom 파서를 사용하여 텍스트가 있는 노드만 유지하면 상당한 절감 효과가 있을 것임
- readability를 사용하지만, JS가 많은 웹사이트에서는 품질이 떨어짐
-
GPT-4o로 직접 스크래핑하는 대신 GPT-4o가 간단한 웹 스크래퍼 스크립트를 작성하게 할 수 있음
- 문제가 발생하면 프롬프트 루프를 사용함
- 제약 해결사를 만들고 실행하는 것이 더 효율적임
-
Kadoa에서 AI 자동화 웹 스크래핑 작업을 진행 중임
- 초기에는 GPT-3를 사용했으나 비용 효율적인 솔루션을 개발함
- CSS 선택자 또는 XPath 추출 코드를 생성하는 코드젠을 사용함
- 작은 LLM을 사용하여 데이터를 정리하고 원하는 형식으로 매핑함
- LLM을 심판으로 사용하여 데이터 품질을 평가함
- 전통적인 ETL 엔지니어링 방법과 작은 LLM 단계를 결합함
-
클래식 음악 데이터베이스를 구축 중임
- ChatGPT를 사용하여 위키피디아에서 이벤트 목록을 추출함
- chatgpt-mini를 사용하여 비용을 절감함
- BeautifulSoup(html).text를 사용하여 토큰 수를 줄임
- 10,000 페이지를 스크래핑할 때 HTML을 제공하고 파이썬 코드를 작성하게 하는 것이 더 효율적이었음
- Pandas의 from_html 기능이 유용하지만, 모든 테이블이 <table> 태그를 사용하지 않음