~/utility/rag-web-crawler

RAG Web Crawler — Halaman Web ke Markdown & Potongan Teks

Merayapi halaman web publik menjadi Markdown bersih, teks polos, dan potongan teks yang saling tumpang tindih dengan URL sumber dan posisi karakter, siap untuk RAG.

data RAG TypeScriptMozilla ReadabilityjsdomTurndown Global
proooxy/rag-web-crawler — spec
kategoriutility / data RAG
bahasaTypeScript
stackTypeScript, Mozilla Readability, jsdom, Turndown
pasarGlobal
outputJSON bersih, siap-RAG

fitur utama

Markdown bersih dan teks polos dari setiap halaman, lengkap dengan judul, daftar, tautan, blok kode, dan tabel sederhana

Potongan siap embedding yang saling tumpang tindih dan berakhir di batas paragraf atau kalimat, masing-masing dengan id tetap, URL dan judul sumber, serta posisi karakter yang tepat untuk sitasi

Konten utama dulu: menu, header, footer, dan sidebar dibuang, dan selector CSS menghapus elemen lain yang Anda tentukan

Mengikuti tautan di dalam setiap situs hingga lima tingkat, dengan setiap halaman diambil sekali saja

Pencarian sebagai ganti URL: setiap halaman hasil sebuah kueri dirayapi seperti URL awal (perlu paket Apify berbayar)

robots.txt dipatuhi secara default, dengan jeda yang sopan antar permintaan ke situs yang sama

Halaman tetap dalam bahasa aslinya — Inggris, Mandarin, dan lainnya — tanpa terjemahan

Status dan kode error untuk setiap halaman, serta ringkasan setiap run dengan jumlah dan alasan berhenti

use case

  • Membangun basis pengetahuan chatbot RAG dari dokumentasi dan halaman pusat bantuan
  • Mendasarkan jawaban agen AI pada halaman web terkini yang bisa mereka kutip
  • Mengubah daftar artikel menjadi embedding untuk pencarian semantik
  • Mengumpulkan halaman yang ditemukan pencarian tentang suatu topik, dalam bahasa aslinya
  • Memperbarui vector store secara terjadwal, dengan id potongan yang tetap selama halamannya tidak berubah
  • Memberikan halaman web dalam Markdown ke agen AI lewat server MCP Apify

parameter input

ParameterTipeWajibDeskripsi
startUrlsarrayopsionalURL halaman publik untuk dirayapi, hingga 1.000
querystringopsionalKueri pencarian yang halaman hasilnya dirayapi (perlu paket Apify berbayar)
queriesarrayopsionalKueri pencarian tambahan, digabung dengan query
maxResultsPerQuerynumberopsionalHasil pencarian yang dirayapi per kueri (default 5, paling banyak 50)
maxPagesnumberopsionalJumlah maksimal halaman berbeda yang dijadwalkan satu run (default 20, paling banyak 1.000)
maxDepthnumberopsionalBerapa tingkat tautan yang diikuti di dalam setiap situs (default 0 = hanya URL awal, paling banyak 5)
maxConcurrencynumberopsionalHalaman yang diproses bersamaan (default 3)
maxSearchRequestsnumberopsionalPermintaan pencarian per run, termasuk percobaan ulang (default 10, 0 = tanpa pencarian)
maxFetchRequestsnumberopsionalSemua percobaan jaringan per run, termasuk robots.txt dan percobaan ulang (default 100)
requestTimeoutSecsnumberopsionalBatas waktu setiap permintaan, dalam detik (default 30)
maxResponseBytesnumberopsionalRespons halaman terbesar yang diterima (default 2 MiB)
maxContentCharsnumberopsionalTeks terpanjang yang disimpan per halaman, dalam karakter (default 50.000)
maxOutputBytesnumberopsionalTotal keluaran per run (default 20 MiB)
respectRobotsTxtbooleanopsionalPeriksa dulu robots.txt setiap situs (aktif secara default)
onlyMainContentbooleanopsionalSimpan hanya konten utama halaman (aktif secara default)
removeSelectorsarrayopsionalSelector CSS elemen yang dihapus sebelum ekstraksi
chunkSizenumberopsionalPanjang potongan dalam karakter, bukan token (default 1.000)
chunkOverlapnumberopsionalKarakter yang dibagi dua potongan berurutan (default 150)

Contoh Keluaran

Satu halaman yang tersimpan dari run sungguhan, dengan teks dipersingkat dan satu dari lima potongannya ditampilkan:

 1{
 2  "schemaVersion": "1.0",
 3  "url": "https://www.w3.org/WAI/tutorials/tables/one-header/",
 4  "title": "Tables with One Header",
 5  "description": "Accessibility resources free online from the international standards organization: W3C Web Accessibility Initiative (WAI).",
 6  "languageCode": "en",
 7  "canonicalUrl": "https://www.w3.org/WAI/tutorials/tables/one-header/",
 8  "markdown": "# Tables with One Header\n\nin [Tables Tutorial](https://www.w3.org/WAI/tutorials/tables/)\n\n## Overview\n\n…",
 9  "text": "Tables with One Header\n\nin Tables Tutorial\n\nOverview\n\nThis page covers tables that have one simple header for rows or one simple header for columns. …",
10  "chunks": [
11    {
12      "id": "495cb4e58e13bbf9b5cdbe922f7ea652973ca4dfda61b952aaa021db045a450c",
13      "index": 0,
14      "text": "Tables with One Header\n\nin Tables Tutorial\n\nOverview\n\nThis page covers tables that have one simple header for rows or one simple header for columns. …",
15      "startChar": 0,
16      "endChar": 988,
17      "sourceUrl": "https://www.w3.org/WAI/tutorials/tables/one-header/",
18      "title": "Tables with One Header"
19    }
20  ],
21  "contentTruncated": false,
22  "sources": [],
23  "crawl": {
24    "depth": 0,
25    "httpStatusCode": 200,
26    "loadedAt": "2026-10-19T07:03:53.643Z",
27    "contentType": "text/html",
28    "renderingMode": "http",
29    "extractionMethod": "main"
30  }
31}

Posisi potongan menghitung code point Unicode di text. Setiap run juga menulis REQUESTS, satu hasil per halaman dengan status dan kode error, dan OUTPUT, ringkasan run dengan jumlah, alasan berhenti, dan event yang ditagih.

Tips

  • Pakai id sebagai ID record di vector store Anda. Nilainya tetap sama antar-run selama halaman dan pengaturan potongan tidak berubah, jadi menulis potongan berdasarkan id pada run terjadwal akan menggantinya, bukan menambah salinan.
  • Mulai dengan sedikit halaman. Periksa Markdown halaman target sebelum menaikkan maxPages atau maxDepth, dan buang sisa seperti kotak tautan terkait dengan removeSelectors.
  • Baca REQUESTS bersama Dataset. Sebuah run bisa berhasil meski ada halaman yang dilewati atau gagal, dan masing-masing menyebutkan alasannya.

faq

Apa bedanya dengan web scraper biasa?
Anda memberinya URL atau kueri pencarian, bukan selector. Ia menyimpan konten utama setiap halaman sebagai Markdown dan teks polos lalu memotong teks menjadi potongan siap embedding, masing-masing dengan URL, judul, dan posisi karakter halaman yang tepat, sehingga jawaban bisa menyebut sumbernya.
Apakah saya perlu API key?
Tidak perlu API key eksternal, baik untuk merayapi maupun mencari. Anda perlu akun Apify; memanggil Actor lewat API Apify memakai token Apify Anda.
Apakah ia merender JavaScript?
Tidak. Ia membaca halaman lewat HTTP, jadi halaman yang butuh JavaScript untuk menampilkan teksnya bisa gagal dengan NO_CONTENT atau datang tidak lengkap. Coba dulu beberapa halaman target Anda.
Halaman apa saja yang bisa dibaca?
Halaman publik berformat HTML, Markdown, dan teks polos. Login, cookie, paywall, CAPTCHA, proxy, PDF, dan gambar berada di luar cakupan, dan alamat jaringan privat serta URL yang memuat kredensial ditolak.
Apakah merayapi situs web diperbolehkan?
Merayapi data publik yang bukan data pribadi umumnya legal, tetapi konten halaman sering dilindungi hak cipta dan sebagian situs membatasi perayapan dalam ketentuannya. Crawler mematuhi robots.txt secara default; Anda bertanggung jawab atas penggunaan data yang Anda kumpulkan.

terkait di ~/utility

Jalankan RAG Web Crawler — Halaman Web ke Markdown & Potongan Teks, atau dapatkan build custom

Mulai ekstraksi di Apify dalam hitungan menit, atau sewa saya untuk membangun scraper custom dan pipeline RAG untuk source dan skema spesifik Anda.

run di Apify dapatkan data custom