News
Brak postów — pierwsze publikacje wkrótce.
Web scraping dla AI: czyszczenie HTML zmniejsza tokeny
Praktyczne zastosowania

Web scraping dla AI: czyszczenie HTML zmniejsza tokeny

Surowy HTML zawiera menu, stopki i reklamy, które zużywają tokeny modelu. Poznaj techniki ekstrakcji treści głównej i narzędzia do czyszczenia.

AN
Andrzej Niemiec
1 stycznia 1970 · 8 min czytania · 1069 słów
Reviewed by Andrzej Niemiec

Dlaczego surowy HTML to marnotrawstwo tokenów

Pobrana strona zawiera znacznie więcej niż treść główną. Nawigacja, stopka, sidebary, skrypty, style, bannery cookies i reklamy — każdy z tych elementów to tokeny w oknie kontekstowym modelu, za które płacisz. Cloudflare zmierzył konkretny przykład: ta sama strona miała 16 180 tokenów jako kod źródłowy i 3 150 jako Markdown — około 80% mniej po czyszczeniu.[1]

Dla RAG i agentów AI to różnica mierzalna. Gdy model ma odpowiedzieć na pytanie o specyfikację produktu, a połowa kontekstu to linki nawigacyjne i "Zapisz się do newslettera" — wynik będzie słabszy, a koszt wyższy. Problem nie jest nowy, ale wraz ze wzrostem liczby zapytań do LLM staje się coraz bardziej widoczny w budżetach produkcyjnych.

Jak kod źródłowy trafia do modelu: trzy etapy ekstrakcji

Proces przetwarzania strony dla AI składa się z trzech odrębnych kroków: pobrania, czyszczenia i ekstrakcji treści głównej.

Pierwszy krok to pobieranie. Zwykły HTTP GET zwraca kod źródłowy, ale dla aplikacji renderowanych przez JavaScript potrzebny jest headless browser lub Selenium — inaczej dostaniesz niekompletny dokument.[2] Drugi krok to czyszczenie: usunięcie skryptów, stylów, metadanych, tagów nawigacyjnych, elementów z klasami sugerującymi reklamy i nawigację. Trzeci to ekstrakcja głównej treści — wybranie sekcji artykułu lub głównej zawartości gdy dostępne, albo heurystyczne znalezienie największego bloku tekstu.

Każdy z tych kroków można zautomatyzować, ale wymaga innego podejścia. Nie istnieje jedno uniwersalne rozwiązanie — wybór zależy od struktury strony i wymaganej precyzji.

Narzędzia do czyszczenia: od bibliotek do serwisów

Do czyszczenia kodu dostępnych jest kilka podejść. Biblioteka BeautifulSoup pozwala na ręczne parsowanie i selekcję elementów, ale wymaga napisania własnych reguł dla każdego typu strony. Trafilatura jest zoptymalizowana pod ekstrakcję treści głównej artykułów i dokumentów — usuwa nawigację, reklamy i boilerplate automatycznie.[3]

Dla bardziej zaawansowanych przypadków Firecrawl oferuje API, które pobiera stronę, czyści kod i zwraca treść w formacie Markdown — gotową do wrzucenia do LLM.[1] Cloudflare Browser Run działa podobnie, ale dodatkowo obsługuje JavaScript i interakcje z przeglądarką.[2]

Wybór narzędzia zależy od skali. Dla kilkudziesięciu stron wystarczy biblioteka i własne reguły. Dla produkcyjnego pipeline'u z setkami zapytań dziennie warto rozważyć dedykowany serwis — oszczędzasz czas developera i unikasz błędów w parsowaniu.

Konwersja do Markdown: format przyjazny dla modeli

Po czyszczeniu kodu warto przekonwertować treść do Markdown. Format ten jest bardziej czytelny dla modeli niż surowy kod — zawiera mniej szumu strukturalnego i lepiej reprezentuje hierarchię treści.[1]

Markdown zawiera nagłówki, listy, tabele i linki w postaci, którą model łatwo interpretuje. Dodatkowo, Markdown zajmuje mniej miejsca niż kod źródłowy — dla tej samej treści może być 4–5 razy mniejszy. To bezpośrednio przekłada się na zmniejszenie liczby tokenów i obniżenie kosztów API.

Kiedy czyszczenie nie wystarczy: schematyzacja danych

Dla niektórych zadań czyszczenie kodu to za mało. Gdy potrzebujesz wyciągnąć ceny, daty, nazwy produktów lub dane tabelaryczne, lepiej jest przekonwertować stronę do schematyzowanego formatu — JSON lub CSV.

Schematyzacja zmniejsza rozmiar wyniku do kilkudziesięciu–kilkuset tokenów zamiast kilku tysięcy. Dodatkowo, dane w formacie strukturalnym są bardziej niezawodne — model nie musi interpretować tekstu, tylko czytać wartości z pól.[3]

Dla stabilnych struktur (np. strony produktowe ze stałym layoutem) można użyć selektorów CSS zamiast LLM — to tańsze i szybsze. Model powinien być używany tam, gdzie strony są nieregularne lub potrzebna jest semantyczna ekstrakcja.

Pomiar: recall i precision, nie tylko redukcja tokenów

Zbyt agresywne czyszczenie może usunąć istotne fragmenty — tabele, podpisy, linki, dane produktowe albo treść ładowaną dynamicznie. Benchmark Scrape-Evals wskazuje, że zarówno nadmiar nawigacji, jak i pominięcie ważnych elementów obniżają jakość ekstrakcji.[4]

Przed wdrożeniem nowego pipeline'u warto zmierzyć recall (czy model dostał wszystkie istotne informacje) i precision (czy nie dostał szumu). Dla RAG to oznacza porównanie wyników wyszukiwania przed i po czyszczeniu — czy model lepiej odpowiada na pytania testowe.

Koszt całego systemu: nie tylko tokeny

Redukcja kodu zmniejsza liczbę tokenów, ale to tylko jeden element kosztów. Należy osobno uwzględnić rendering przeglądarkowy (jeśli potrzebny), opłaty scrapera, proxy, retry, cache i liczbę stron przetwarzanych dziennie.[3]

Na przykład, jeśli scraper pobiera 1000 stron dziennie, a każda ma średnio 20 000 tokenów surowego kodu i 3 000 po czyszczeniu — oszczędzasz 17 000 tokenów na stronę. Przy cenie 0,01 USD za 1000 tokenów to około 170 USD dziennie. Ale jeśli używasz serwisu do czyszczenia, który kosztuje 0,001 USD za stronę, to 1 USD dziennie — oszczędność jest realna, ale trzeba ją policzyć dla swojego konkretnego przypadku.

Praktyczne kroki: jak wdrożyć czyszczenie w istniejącym pipeline'u

Jeśli masz działający scraper, możesz dodać czyszczenie w kilka minut. Zainstaluj Trafilatură lub Firecrawl, zastąp bezpośrednią ekstrakcję tekstu z kodu wywołaniem biblioteki czyszczącej, i porównaj wyniki na kilku testowych stronach.

Dla LangChain lub LlamaIndex istnieją gotowe integracje — wystarczy zmienić retriever z BeautifulSoupHTMLLoader na FirecrawlLoader lub TrafilaturaLoader. Uruchom te same zapytania testowe i sprawdź, czy jakość odpowiedzi się poprawiła, a liczba tokenów spadła.

Jeśli wyniki są lepsze — masz odpowiedź. Jeśli twoje dane wymagają specyficznego parsowania — wiesz, że musisz napisać własne reguły.

Najczęstsze pytania

Czy czyszczenie kodu zawsze zmniejsza liczbę tokenów?

Nie zawsze. Dla stron z minimalną nawigacją (np. artykuły blogowe) czyszczenie zmniejsza tokeny o 20–30%. Dla stron e-commerce z bogatą nawigacją i reklamami — o 70–90%. Warto zmierzyć na swoich danych zamiast zakładać uniwersalny wynik.

Czy mogę używać zwykły regex do usuwania tagów?

Regex jest niebezpieczny — łatwo usunąć istotne elementy lub zostawić fragmenty tagów. Lepiej użyć parsera (BeautifulSoup, lxml) lub dedykowanej biblioteki (Trafilatura). Dla produkcji — serwis API.

Czy czyszczenie spowalnia pipeline?

Nie znacząco. Trafilatura przetwarza stronę w kilkaset milisekund. Firecrawl i Cloudflare działają równolegle — pobieranie, czyszczenie i konwersja odbywają się na ich serwerach. Dla pipeline'u, który czeka na odpowiedź LLM (sekundy–minuty), dodatkowe kilkaset ms to pomijalny narzut.

Czy czyszczenie może usunąć ważne informacje?

Tak, jeśli reguły są zbyt agresywne. Dlatego warto testować na rzeczywistych stronach i mierzyć recall. Dla krytycznych danych (ceny, daty, specyfikacje) lepiej użyć schematyzacji zamiast czyszczenia ogólnego.

Czy powinienem czyszczać kod dla każdego modelu?

Tak. Niezależnie od modelu (GPT-4, Claude, Llama) mniej szumu w kontekście oznacza lepsze wyniki i niższe koszty. Czyszczenie jest niezależne od wyboru LLM.

Źródła

  1. How To Scrape A Website To Markdown For LLMs And AI Agents (In Under 5 Minutes) — Firecrawl
  2. Introducing Markdown for Agents — Cloudflare
  3. How to Optimize Web Scraping Skills for AI Agents: 6 Token-Saving Techniques — MindStudio
  4. Scrape-Evals: An Open Benchmark for Web Scraping — Firecrawl
AN
O autorze
Andrzej Niemiec

Fanatyk nowych technologii i specjalista w zakresie sztucznej inteligencji.

Analiza i dane

Trend rynkowy

Trend rynkowy

Trend rynkowy