5:31Better Stack
Log in to leave a comment
No posts yet
웹페이지의 HTML을 단순히 텍스트로만 긁어오면 AI 에이전트는 길을 잃습니다. 텍스트는 보이지만 문서의 위계가 사라지기 때문입니다. 2024년 발표된 연구 데이터에 따르면, 문서의 계층 구조를 보존하는 방식이 단순히 텍스트를 자르는 방식보다 검색 정확도를 30% 이상 끌어올립니다. 저는 에이전트가 헤더 정보를 보고 데이터의 경중을 즉각 파악하게 만드는 것이 핵심이라고 확신합니다.
가장 먼저 해야 할 일은 BeautifulSoup의 get_text()를 버리는 것입니다. 대신 Markdownify 라이브러리를 사용해 HTML 태그를 마크다운 헤더로 매핑하십시오. 변환된 마크다운을 헤더 단위로 분할하여 상위 섹션 전체를 컨텍스트로 제공하는 상위-하위 청킹 전략을 써야 합니다. Trafilatura 라이브러리를 함께 사용하면 본문 추출과 동시에 토큰 소비량을 67%까지 줄일 수 있습니다. 비용은 아끼고 정확도는 높이는 가장 확실한 방법입니다.
자바스크립트로 구현한 탭 메뉴나 아코디언 뒤에 숨은 데이터는 정적 크롤러가 절대 읽지 못합니다. 저는 이런 보이지 않는 데이터가 RAG 시스템의 답변 품질을 갉아먹는 주범이라고 생각합니다. Playwright는 브라우저 기본 프로토콜인 CDP에 직접 연결되기에 Selenium보다 빠르고 강력하게 동적 콘텐츠를 제어합니다. 실제 적용 사례를 보면, 자동 클릭 시퀀스를 구현한 시스템이 수동 수집보다 30% 더 많은 데이터를 확보했습니다.
Playwright 기반의 자동화 로직을 구축할 때 page.wait_for_selector 기능을 루프로 돌리십시오. 클릭 가능한 요소가 화면에 나타날 때까지 확실히 기다려야 합니다. 그다음 scroll_into_view_if_needed() 메서드를 호출해 무한 스크롤이나 AJAX 요청을 강제로 발생시킵니다. 각 탭을 순차적으로 클릭하고 변화된 DOM 상태를 실시간으로 캡처해 저장하십시오. 이 과정을 거쳐야 비로소 데이터 누락 없는 데이터베이스가 완성됩니다.
광고, 푸터, 메뉴 바는 에이전트의 컨텍스트 윈도우를 낭비하고 임베딩 벡터를 오염시킵니다. 웹사이트의 노이즈는 생각보다 심각해서, 정제되지 않은 데이터는 AI에게 독이나 다름없습니다. Readability.js는 텍스트와 링크의 밀도를 분석해 실제 정보가 담긴 본문만 골라냅니다. 벤치마크 결과에서 Readability는 모든 페이지 타입에서 0.970의 성능 중앙값을 기록하며 본문 외 요소를 정확히 제거했습니다.
데이터 정제 파이프라인에 이 알고리즘을 넣으십시오. 수집한 HTML을 Readability.js에 넣어 제목과 본문만 필터링한 뒤, 정규표현식으로 불필요한 공백을 지워야 합니다. 이렇게 정제된 텍스트를 마크다운으로 변환해 저장하면 에이전트가 읽을 데이터 양이 90%까지 줄어듭니다. 검색 관련성은 2.29배 향상됩니다. 억지로 많은 데이터를 넣기보다 깨끗한 데이터를 넣는 것이 훨씬 효율적입니다.
대부분의 웹사이트는 navigator.webdriver 플래그를 보고 AI 에이전트의 접근을 막습니다. 캡차 화면을 마주하고 싶지 않다면 스텔스 전략이 필수입니다. 기계적인 움직임은 금방 들통납니다. 저는 수학적으로 인간의 행동을 모사하는 방식이 가장 영리한 해결책이라고 봅니다.
우선 playwright-stealth 플러그인을 써서 웹드라이버 플래그를 지우고 사용자 에이전트를 최신 크롬 버전으로 속이십시오. 마우스를 움직일 때는 직선이 아닌 베지에 곡선을 써야 합니다.
타이핑할 때도 문자마다 50ms에서 200ms 사이의 무작위 지연 시간을 넣으십시오. 페이지를 넘길 때 2초에서 5초 정도 랜덤하게 쉬어주는 것만으로도 안티봇 시스템의 눈을 피할 수 있습니다. 조금 느려 보일 수 있지만, 차단당해 아예 수집을 못 하는 것보다 훨씬 빠릅니다.