# GPT-4o를 활용한 웹 스크래핑: 강력하지만, 비용이 많이 듦

> Clean Markdown view of GeekNews topic #16594. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=16594](https://news.hada.io/topic?id=16594)
- GeekNews Markdown: [https://news.hada.io/topic/16594.md](https://news.hada.io/topic/16594.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2024-09-03T23:33:28+09:00
- Updated: 2024-09-03T23:33:28+09:00
- Original source: [blancas.io](https://blancas.io/blog/ai-web-scraper/)
- Points: 7
- Comments: 1

## Topic Body

- OpenAI의 새로운 구조화된 출력 기능을 사용하여 AI 지원 웹 스크래퍼를 개발한 경험을 요약한 글  
  
##### GPT-4o에게 데이터 스크래핑 요청하기  
  
- 첫 번째 실험은 GPT-4o에게 HTML 문자열에서 데이터를 추출하도록 요청  
- Pydantic 모델을 사용하여 구조화된 출력을 설정함  
  ```python  
  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 등이 있음

## Comments



### Comment 28549

- Author: neo
- Created: 2024-09-03T23:33:29+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=41428274) 
- 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 기능이 유용하지만, 모든 테이블이 &lt;table&gt; 태그를 사용하지 않음
