---
name: web-scraper
description: "Smart agentic web data extraction with multi-strategy scraping (Crawl4AI v4, Firecrawl), LLM extraction loops, anti-bot bypass, and structured export / Ekstraksi data web cerdas dan agentic dengan scraping multi-strategi (Crawl4AI v4, Firecrawl), ekstraksi LLM, bypass anti-bot, dan ekspor terstruktur."
author: "Roedy Rustam"
version: "4.4.2"
---
# Agentic Web Scraper Expert (2026 Edition)
[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)
---
## English
### Orchestration & Integration
- **Upstream Orchestrators**: Works under `brainstorming` and `zero-to-prod-orchestrator` (Phase 1 & Phase 5 - Extraction & Data Pipelines) to gather web data.
- **Downstream Cooperating Skills**:
- `browser-automation-expert` — Hardcore anti-bot evasion, stealth Playwright execution, and Cloudflare bypass.
- `ai-llm-integration-expert` — LLM schema-driven structured data extraction from DOM markdown.
- `deep-research-analyst` — Feed extracted web sources to multi-source evidence synthesis.
- `data-pipeline-etl-expert` — Ingest extracted datasets into transformation and analytics storage.
- `session-memory-manager` — Cache scraped web structures and extraction progress checkpoints.
### Description
Advanced Agentic Web Scraping utilizing modern multi-strategy data extraction. Leverages **Crawl4AI v4** and **Firecrawl** to convert raw DOMs into LLM-friendly Markdown. Implements Agentic Extraction loops where the LLM guides the scraper dynamically based on page state. Incorporates strategies for bypassing anti-bot measures (Cloudflare Turnstile, Datadome) and navigating dynamic Shadow DOMs.
### Trigger Conditions
- Extracting structured data from websites for analysis, training data, or content pipelines.
- Scraping dynamic JavaScript-rendered pages and complex SPAs.
- Converting web pages to clean Markdown for LLM context or RAG pipelines.
- Dealing with anti-bot protections or complex Shadow DOM architectures during scraping.
- Implementing an automated agentic data extraction loop.
### Extracting DOM into LLM-Friendly Markdown
Use **Crawl4AI v4** for high-performance async extraction and **Firecrawl** for seamless LLM-ready conversion.
**Crawl4AI v4 (Async Python):**
```python
import asyncio
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig, CacheMode
async def extract_markdown(url: str):
config = BrowserConfig(headless=True, bypass_csp=True)
run_config = CrawlerRunConfig(
cache_mode=CacheMode.ENABLED,
remove_overlay_elements=True,
word_count_threshold=50
)
async with AsyncWebCrawler(config=config) as crawler:
result = await crawler.arun(url=url, config=run_config)
# Returns clean, AI-optimized markdown ready for LLM consumption
return result.markdown.fit_markdown
```
**Firecrawl (Managed API):**
```python
from firecrawl import FirecrawlApp
from pydantic import BaseModel
app = FirecrawlApp(api_key="fc-xxxx")
class ExtractionSchema(BaseModel):
title: str
content: str
key_metrics: list[str]
# Single API call to extract structured data based on JSON schema
result = app.scrape_url(
"https://example.com/data",
formats=["extract", "markdown"],
extract={"schema": ExtractionSchema.model_json_schema()}
)
print(result.markdown) # Clean markdown
print(result.extract) # Structured JSON
```
### Anti-Bot Bypass & Shadow DOMs
Scraping modern web apps requires bypassing anti-bot measures like Cloudflare Turnstile and Datadome, as well as accessing deeply nested elements.
1. **Anti-Bot Bypass (Cloudflare Turnstile, Datadome):**
- **Residential Proxies:** Rotate high-quality residential IPs to avoid datacenter IP bans.
- **Browser Fingerprinting:** Use tools like `playwright-stealth` or specialized stealth browsers (e.g., Undetected ChromeDriver, Curl-Impersonate) to mask automated fingerprints (WebGL, Canvas, User-Agent).
- **Human-like Interaction:** Introduce random delays, simulate realistic mouse movements, and handle CAPTCHAs via third-party solving services only when necessary.
2. **Dynamic Shadow DOMs:**
- Use CSS piercing selectors or JavaScript execution to penetrate the Shadow Root.
- Example (Playwright): `await page.locator('my-web-component >> css=.internal-element').text_content()`
- Recursively traverse the DOM tree injecting scripts to extract content from encapsulated components.
### Agentic Extraction Loops
Implement an autonomous loop where an LLM guides the scraper based on the current page state, rather than relying on brittle CSS selectors.
1. **Observe:** The scraper extracts the current DOM into clean Markdown.
2. **Analyze:** The LLM analyzes the Markdown to identify necessary data or the next interaction step (e.g., "Click the 'Load More' button").
3. **Act:** The LLM issues a command (extract data, navigate, click, fill form).
4. **Loop:** Repeat until the extraction goal is met.
```python
async def agentic_scrape_loop(url: str, goal: str):
current_url = url
while True:
markdown_content = await extract_markdown(current_url)
# LLM analyzes state and decides next action
action = await llm_decide_action(markdown_content, goal)
if action.type == "COMPLETE":
return action.extracted_data
elif action.type == "CLICK":
await click_element(action.target_selector)
elif action.type == "NAVIGATE":
current_url = action.new_url
```
### Ethical Scraping Checklist
- [ ] Check `robots.txt` and respect `Disallow` rules.
- [ ] Implement rate limiting.
- [ ] Use descriptive `User-Agent` headers.
- [ ] Do not scrape personal/private data without consent.
### Sovereign Execution, Token Efficiency & Invariants
| Dimension | Sovereign Mandate & Deterministic Contract |
| :--- | :--- |
| **Frontier Model Cascade** | Medium / High (`GPT-5.6 Sol Medium`, `Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Grok 4.7 High Fast`) |
| **Availability Fallback** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Zero unhandled missing-model errors) |
| **KV-Cache & Token Protocol** | Pin static instructions & schemas at prompt prefix (`kv-cache-prefix-optimizer`); pass surgical `CONTEXT_MAP.md` slices (<250 tokens/call) during Swarm Fan-Out |
| **SaaT CLI & MCP Dispatch** | CLI: `vibes skill exec web-scraper ` / MCP: `vibes_skill_dispatch`, `vibes_ast_query`, `vibes_compile_cache`, `vibes_optimize_budget`, `vibes_verify_gate` |
| **NFR & Anti-Slop Invariants** | P99 API Gateway Latency < 85ms, OpenAPI 3.1 / TypeSpec strict schema parity, RFC 9457 Problem Details error contracts, Idempotency-Key enforcement; 100% complete zero-placeholder output verified via `node scripts/check-anti-slop.js --strict` |
---
---
## Bahasa Indonesia
### Integrasi Orkestrasi
- **Orkestrator Hulu**: Beroperasi di bawah arahan `brainstorming` dan `zero-to-prod-orchestrator` (Fase 1 & Fase 5 - Ekstraksi & Pipeline Data) untuk mengumpulkan data web.
- **Skill Hilir & Kerja Sama**:
- `browser-automation-expert` — Bypass proteksi anti-bot, eksekusi stealth Playwright, dan Cloudflare bypass.
- `ai-llm-integration-expert` — Ekstraksi data terstruktur berbasis skema LLM dari DOM markdown.
- `deep-research-analyst` — Menyalurkan sumber web terekstraksi ke sintesis bukti multi-sumber.
- `data-pipeline-etl-expert` — Memasukkan dataset ekstraksi ke pipeline transformasi dan analitik.
- `session-memory-manager` — Menyimpan cache struktur web dan checkpoint progres ekstraksi.
### Deskripsi
Scraping Web Agentic tingkat lanjut menggunakan ekstraksi data multi-strategi modern. Memanfaatkan **Crawl4AI v4** dan **Firecrawl** untuk mengubah DOM mentah menjadi Markdown yang ramah LLM. Mengimplementasikan loop Ekstraksi Agentic di mana LLM memandu scraper secara dinamis berdasarkan status halaman. Menggabungkan strategi untuk melewati tindakan anti-bot (Cloudflare Turnstile, Datadome) dan menavigasi Shadow DOM yang dinamis.
### Kondisi Pemicu
- Mengekstrak data terstruktur dari situs web untuk analisis, data pelatihan, atau pipeline konten.
- Scraping halaman yang dirender JavaScript secara dinamis dan SPA kompleks.
- Mengonversi halaman web menjadi Markdown bersih untuk konteks LLM atau pipeline RAG.
- Menghadapi perlindungan anti-bot atau arsitektur Shadow DOM yang kompleks saat scraping.
- Mengimplementasikan loop ekstraksi data agentic otomatis.
### Mengekstrak DOM menjadi Markdown Ramah LLM
Gunakan **Crawl4AI v4** untuk ekstraksi async berperforma tinggi dan **Firecrawl** untuk konversi siap LLM yang mulus. (Lihat contoh kode di bagian bahasa Inggris).
### Bypass Anti-Bot & Shadow DOM
1. **Bypass Anti-Bot (Cloudflare Turnstile, Datadome):**
- **Proxy Residensial:** Rotasi IP residensial berkualitas tinggi untuk menghindari pemblokiran IP datacenter.
- **Browser Fingerprinting:** Gunakan alat seperti `playwright-stealth` atau browser stealth khusus untuk menyembunyikan sidik jari otomatis.
- **Interaksi Mirip Manusia:** Tambahkan penundaan acak, simulasikan gerakan mouse yang realistis.
2. **Shadow DOM Dinamis:**
- Gunakan selektor penembus CSS atau eksekusi JavaScript untuk menembus Shadow Root.
- Telusuri pohon DOM secara rekursif dengan menyuntikkan skrip untuk mengekstrak konten.
### Loop Ekstraksi Agentic
Implementasikan loop otonom di mana LLM memandu scraper berdasarkan status halaman saat ini, bukan bergantung pada selektor CSS yang rentan rusak.
1. **Observasi:** Scraper mengekstrak DOM saat ini menjadi Markdown yang bersih.
2. **Analisis:** LLM menganalisis Markdown untuk mengidentifikasi data yang diperlukan atau langkah interaksi selanjutnya (misal: "Klik tombol 'Muat Lebih Banyak'").
3. **Aksi:** LLM mengeluarkan perintah (ekstrak data, navigasi, klik, isi form).
4. **Loop:** Ulangi hingga tujuan ekstraksi tercapai.
### Checklist Scraping Etis
- [ ] Periksa `robots.txt` dan hormati aturan `Disallow`.
- [ ] Implementasikan rate limiting.
- [ ] Gunakan header `User-Agent` yang deskriptif.
- [ ] Jangan scraping data pribadi/privat tanpa izin.
### Matriks Eksekusi Berdaulat, Efisiensi Token & Invarian
| Dimensi | Mandat Berdaulat & Kontrak Deterministik |
| :--- | :--- |
| **Kaskade Model Frontier** | Medium / High (`GPT-5.6 Sol Medium`, `Gemini 4 Argon`, `Claude Sonnet 5.5 High`, `Grok 4.7 High Fast`) |
| **Invarian Fallback Ketersediaan** | `Gemini 4 Argon/Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6` (Bebas gagal saat model belum tersedia/kuota penuh) |
| **Protokol Hemat Token & KV-Cache** | Kunci instruksi & skema statis di prefix awal (`kv-cache-prefix-optimizer`); kirim potongan `CONTEXT_MAP.md` (<250 token/panggilan) saat Fan-Out |
| **Eksekusi SaaT CLI & MCP** | CLI: `vibes skill exec web-scraper ` / MCP: `vibes_skill_dispatch`, `vibes_ast_query`, `vibes_compile_cache`, `vibes_optimize_budget`, `vibes_verify_gate` |
| **Invarian NFR & Anti-Slop** | Latensi P99 API < 85ms, paritas skema ketat OpenAPI 3.1 / TypeSpec, kontrak error RFC 9457 Problem Details, penegakan Idempotency-Key; kode 100% tuntas tanpa placeholder diverifikasi melalui `node scripts/check-anti-slop.js --strict` |