텍스트 추출(PEG)
웹 페이지에서 얻은 텍스트는 HTML 구조가 부족하거나, 불필요한 공백과 라벨이 섞여 있는 경우가 많습니다. Guida에서는 일반 JavaScript/Lua/Janet 처리에 더해 Janet의 PEG(Parsing Expression Grammar)를 사용해 반복 가능한 추출 규칙을 작성할 수 있습니다.
언제 PEG를 쓰나
섹션 제목: “언제 PEG를 쓰나”PEG는 다음과 같은 경우에 적합합니다.
- 같은 형식의 텍스트 블록에서 이름, 가격, ID, 날짜 등을 추출
- 정규식만으로는 읽기 어려운 여러 단계 추출 수행
- 페이지별 “추출 규칙”을 워크스페이스에 저장해 재사용
DOM 구조가 안정적이라면 먼저 g.dom.getElements()나 g.page.getDom()을 사용하세요. PEG는 DOM에서 가져온 뒤의 텍스트 정리에 적합합니다.
기본 흐름
섹션 제목: “기본 흐름”- 브라우저에서 텍스트 가져오기
- 불필요한 공백이나 라벨을 가볍게 정리
- PEG 또는 일반 문자열 처리로 구조화
- 결과를
g.store,g.queue, 외부 데이터베이스에 저장
await g.dom.waitForDomStable();
const rows = await g.dom.getElements(".product", ["innerText"]);for (const row of rows) { g.store.put("raw-products", crypto.randomUUID(), { text: row.innerText, capturedAt: new Date().toISOString(), });}Janet을 선택하는 이유
섹션 제목: “Janet을 선택하는 이유”Janet은 내장 PEG 엔진을 갖고 있으며 구조화되지 않은 텍스트 추출에 강한 언어입니다. Guida에서는 JavaScript, Lua, Janet 모두 같은 브라우저 API를 사용할 수 있으므로, 페이지 조작은 JavaScript로 하고 복잡한 텍스트 추출은 Janet으로 나누어 사용할 수도 있습니다.
현실적인 사용 방식
섹션 제목: “현실적인 사용 방식”처음부터 큰 grammar를 만들지 말고 다음 순서로 진행하면 안정적입니다.
- DOM 셀렉터로 대상 범위를 최대한 좁히기
- 하나의 텍스트 블록에 대한 추출 규칙 만들기
- 실패한 입력을 워크스페이스 저장소에 저장하기
- 큐와 워커로 같은 추출을 많은 페이지에 적용하기
관련 페이지: