CrawlForge
Laman UtamaPlaygroundKes PenggunaanIntegrasiHargaDokumentasiBlog
Panduan Web Scraping LlamaIndex dengan CrawlForge MCP
Tutorials
Kembali ke Blog
Tutorial

Panduan Web Scraping LlamaIndex dengan CrawlForge MCP

C
CrawlForge Team
Pasukan Kejuruteraan
14 April 2026
11 min bacaan

Pada halaman ini

LlamaIndex ialah rangka kerja pilihan untuk RAG pengeluaran, tetapi ia dihadirkan dengan pembaca HTML yang lemah pada tapak berat JavaScript dan halaman yang dilindungi Cloudflare. Tukar mereka dengan CrawlForge dan saluran paip LlamaIndex anda mengendalikan mana-mana URL -- HTML statik, SPA, atau dinding anti-bot.

Python
from llama_index.core import Document
from crawlforge_llamaindex import CrawlForgeReader

reader = CrawlForgeReader(api_key="cf_live_your_key")
docs: list[Document] = reader.load_data(urls=["https://docs.stripe.com/api"])

Panduan ini menunjukkan cara menggunakan web scraping LlamaIndex dengan CrawlForge sebagai sumber data anda -- daripada pemuat halaman tunggal ke saluran paip RAG penuh dan alat ejen.

Jadual Kandungan

  • Mengapa LlamaIndex Memerlukan Pembaca Web yang Lebih Baik
  • Prasyarat
  • Langkah 1: Pasang Kebergantungan
  • Langkah 2: Bina Pembaca CrawlForge
  • Langkah 3: Indeks Halaman Web Langsung
  • Langkah 4: Tanya Indeks
  • Contoh Penuh: Docs RAG dengan Kemas Kini Langsung
  • Lanjutan: Alat CrawlForge untuk Ejen LlamaIndex
  • Penyelesaian Masalah
  • Soalan Lazim

Mengapa LlamaIndex Memerlukan Pembaca Web yang Lebih Baik

SimpleWebPageReader dan BeautifulSoupWebReader terbina dalam LlamaIndex baik untuk pos blog statik tetapi gagal pada:

  • Kandungan yang dirender JavaScript (aplikasi React, Vue, Angular)
  • Halaman yang dilindungi Cloudflare / DataDome / Akamai (kebanyakan docs SaaS)
  • Tapak yang mengembalikan 403 kepada User-Agent generik
  • Halaman di mana kandungan utama berada di dalam adik-beradik <main>, tidak mudah diekstrak

CrawlForge menyelesaikan kesemua empat. Alat extract_contentnya menggunakan algoritma kebolehbacaan yang ditala untuk halaman artikel, docs, dan produk. stealth_mode mengendalikan anti-bot. scrape_with_actions melaksanakan JavaScript. Kesemua 26 alat mengembalikan teks bersih atau markdown yang sedia untuk dikepingkan. Untuk latar belakang tentang mengapa ini penting untuk RAG, lihat panduan saluran paip RAG kami.

Prasyarat

  • Python 3.9+ -- python --version
  • LlamaIndex -- pip install llama-index-core llama-index-readers-web
  • Akaun CrawlForge -- percuma di crawlforge.dev/signup, 1,000 credits disertakan
  • API key OpenAI atau Anthropic untuk panggilan LLM LlamaIndex (atau gunakan mana-mana penyedia yang disokong)

Langkah 1: Pasang Kebergantungan

Bash
pip install llama-index-core llama-index-embeddings-openai requests

Eksport kunci anda:

Bash
export CRAWLFORGE_API_KEY="cf_live_your_key_here"
export OPENAI_API_KEY="sk-..."

Langkah 2: Bina Pembaca CrawlForge

Pembaca LlamaIndex mewarisi daripada BaseReader dan mengembalikan objek Document. Inilah pembaca minimum yang membungkus titik akhir extract_content CrawlForge:

Python
# crawlforge_reader.py
import os
from typing import List, Optional
import requests
from llama_index.core.readers.base import BaseReader
from llama_index.core.schema import Document


class CrawlForgeReader(BaseReader):
    """LlamaIndex reader that uses CrawlForge for web scraping."""

    BASE_URL = "https://crawlforge.dev/api/v1/tools"

    def __init__(self, api_key: Optional[str] = None, use_stealth: bool = False):
        self.api_key = api_key or os.environ["CRAWLFORGE_API_KEY"]
        self.use_stealth = use_stealth

    def load_data(self, urls: List[str]) -> List[Document]:
        documents = []
        tool = "stealth_mode" if self.use_stealth else "extract_content"

        for url in urls:
            response = requests.post(
                f"{self.BASE_URL}/{tool}",
                headers={
                    "Authorization": f"Bearer {self.api_key}",
                    "Content-Type": "application/json",
                },
                json={
                    "url": url,
                    "options": {"format": "markdown"},
                },
                timeout=30,
            )
            response.raise_for_status()
            data = response.json()

            documents.append(
                Document(
                    text=data.get("content", ""),
                    metadata={
                        "source": url,
                        "title": data.get("title"),
                        "scraped_at": data.get("scraped_at"),
                    },
                )
            )

        return documents

Kos: 2 credits setiap URL untuk extract_content, 5 credits untuk stealth_mode.

Langkah 3: Indeks Halaman Web Langsung

Pasangkan pembaca ke dalam saluran paip LlamaIndex standard:

Python
# build_index.py
from llama_index.core import VectorStoreIndex
from crawlforge_reader import CrawlForgeReader

reader = CrawlForgeReader()
docs = reader.load_data(urls=[
    "https://docs.stripe.com/api/charges/create",
    "https://docs.stripe.com/api/payment_intents/create",
    "https://docs.stripe.com/api/refunds/create",
])

index = VectorStoreIndex.from_documents(docs)
index.storage_context.persist(persist_dir="./storage/stripe_docs")

Anda kini mempunyai indeks API Stripe yang berterusan yang dibina daripada docs langsung. Kos: 6 credits (3 URL x 2).

Langkah 4: Tanya Indeks

Python
# query_index.py
from llama_index.core import StorageContext, load_index_from_storage

storage = StorageContext.from_defaults(persist_dir="./storage/stripe_docs")
index = load_index_from_storage(storage)

query_engine = index.as_query_engine()
response = query_engine.query(
    "What are the required fields to create a Charge in Stripe's API?"
)
print(response)
# -> "To create a Charge, you must provide amount (integer in cents) and
#     currency (three-letter ISO code). Additionally you need a source
#     (payment method) or customer."

Contoh Penuh: Docs RAG dengan Kemas Kini Langsung

Gabungkan semuanya -- Stripe docs RAG yang menyegar semula setiap malam:

Python
# docs_rag.py
import os
from datetime import datetime
from llama_index.core import VectorStoreIndex, StorageContext, load_index_from_storage
from crawlforge_reader import CrawlForgeReader

PERSIST_DIR = "./storage/stripe_docs"
TARGET_URLS = [
    "https://docs.stripe.com/api/charges/create",
    "https://docs.stripe.com/api/payment_intents/create",
    "https://docs.stripe.com/api/refunds/create",
    "https://docs.stripe.com/api/customers/create",
    "https://docs.stripe.com/api/subscriptions/create",
]


def refresh_index() -> VectorStoreIndex:
    """Re-scrape sources and rebuild the index."""
    reader = CrawlForgeReader()
    docs = reader.load_data(urls=TARGET_URLS)
    index = VectorStoreIndex.from_documents(docs)
    index.storage_context.persist(persist_dir=PERSIST_DIR)
    print(f"Indexed {len(docs)} docs at {datetime.utcnow().isoformat()}Z")
    return index


def load_index() -> VectorStoreIndex:
    """Load the persisted index from disk."""
    storage = StorageContext.from_defaults(persist_dir=PERSIST_DIR)
    return load_index_from_storage(storage)


def ask(question: str) -> str:
    index = load_index() if os.path.exists(PERSIST_DIR) else refresh_index()
    return str(index.as_query_engine().query(question))


if __name__ == "__main__":
    # Refresh once a day in a cron job: python docs_rag.py --refresh
    import sys
    if "--refresh" in sys.argv:
        refresh_index()
    else:
        print(ask("How do I create a refund for a charge?"))

Kos penyegaran semula malam: 10 credits (5 URL x 2). Sepanjang 30 hari itu ialah 300 credits -- jauh di dalam peringkat free.

Lanjutan: Alat CrawlForge untuk Ejen LlamaIndex

Sistem ejen LlamaIndex menerima takrifan FunctionTool sewenang-wenangnya. Bungkus panggilan CrawlForge sebagai alat dan ejen anda boleh scrape atas permintaan:

Python
# crawlforge_tools.py
from llama_index.core.tools import FunctionTool
from crawlforge_reader import CrawlForgeReader


def scrape_url(url: str) -> str:
    """Scrape a URL and return its main content as markdown."""
    reader = CrawlForgeReader()
    docs = reader.load_data(urls=[url])
    return docs[0].text if docs else ""


def search_and_scrape(query: str, n: int = 3) -> list[str]:
    """Search the web and return content from the top N results."""
    import os, requests
    resp = requests.post(
        "https://crawlforge.dev/api/v1/tools/search_web",
        headers={"Authorization": f"Bearer {os.environ['CRAWLFORGE_API_KEY']}"},
        json={"query": query, "limit": n},
        timeout=30,
    ).json()
    urls = [r["url"] for r in resp.get("results", [])]
    reader = CrawlForgeReader()
    return [d.text for d in reader.load_data(urls=urls)]


scrape_tool = FunctionTool.from_defaults(fn=scrape_url)
search_tool = FunctionTool.from_defaults(fn=search_and_scrape)

Kemudian hantar [scrape_tool, search_tool] kepada mana-mana ejen LlamaIndex:

Python
from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI

agent = ReActAgent.from_tools(
    tools=[scrape_tool, search_tool],
    llm=OpenAI(model="gpt-4o-mini"),
    verbose=True,
)

response = agent.chat(
    "Research the current state of Anthropic's MCP protocol adoption in 2026. "
    "Cite at least 3 sources."
)
print(response)

Pecahan Kos Credit

OperasiAlatCredits
Masukkan satu halaman statikextract_content2
Masukkan satu halaman berat JSscrape_with_actions5
Masukkan dilindungi Cloudflarestealth_mode5
Cari + scrape ejen (3 URL)search_web + 3x extract_content11
Penyelidikan mendalam penuhdeep_research10

Penyelesaian Masalah

Document.text kosong untuk sesetengah URL -- Halaman berkemungkinan memerlukan JavaScript. Cipta instans dengan use_stealth=True atau bina varian pembaca yang memanggil scrape_with_actions.

requests.exceptions.HTTPError: 429 -- Anda mencapai had kadar CrawlForge. Tambah percubaan semula dengan undur atau bahagikan muatan pukal merentas kelompok 10 URL.

Pengindeksan LlamaIndex perlahan -- Kelompokkan panggilan pembaca anda dengan concurrent.futures.ThreadPoolExecutor (terikat I/O, GIL bukan penghalang). Pecutan 10x pada 50+ URL adalah tipikal.

Metadata Document hilang -- Titik akhir scrape_structured CrawlForge tidak mengisi title dengan cara yang sama seperti extract_content. Kekal dengan extract_content untuk pengingesan RAG; gunakan scrape_structured hanya untuk pengekstrakan medan bertaip.

Kos embedding melonjak -- LlamaIndex membenamkan semula pada setiap panggilan VectorStoreIndex.from_documents. Kekalkan dengan index.storage_context.persist() dan muatkan dengan load_index_from_storage() untuk mengelakkan kerja semula.

Langkah Seterusnya

  • Baca panduan saluran paip RAG untuk corak perolehan hujung ke hujung
  • Terokai rangka kerja lain dalam pos integrasi LangChain kami
  • Lihat docs bermula untuk REST API penuh
  • Bandingkan vendor scraping di alternatif Firecrawl

Mulakan secara percuma dengan 1,000 credits di crawlforge.dev/signup. Tiada kad kredit diperlukan.

Cuba sendiri — tiada pendaftaran diperlukan

Jalankan mana-mana daripada 27 alat scraping dan pengekstrakan CrawlForge dalam playground, kemudian mula secara percuma dengan 1,000 credits.

1,000 credits percuma • Isi semula setiap bulan • Tiada kad kredit diperlukan

Tag

LlamaIndexweb-scrapingRAGPythontutorialvector-searchAI-agents

Tentang Penulis

C

CrawlForge Team

Pasukan Kejuruteraan

Membina MCP server web scraping yang paling menyeluruh. Kami mencipta alatan yang membantu pembangun mengekstrak, menganalisis dan mengubah data web untuk aplikasi AI.

Kekal dikemas kini dengan pandangan terkini

Dapatkan tutorial, kemas kini produk dan petua web scraping terus ke peti masuk anda.

Tiada spam. Berhenti melanggan bila-bila masa.

Praktikkan ini

Uji alat CrawlForge pada mana-mana URL — percuma, tanpa pendaftaran.

Pada halaman ini

Frequently Asked Questions

Mengapa tidak menggunakan pembaca web terbina dalam LlamaIndex?+

SimpleWebPageReader dan BeautifulSoupWebReader berfungsi untuk pos blog statik tetapi gagal pada halaman yang dirender JavaScript, docs yang dilindungi Cloudflare, dan tapak yang mengembalikan 403 kepada klien generik. CrawlForge mengendalikan kesemua tiga dengan extract_content (kebolehbacaan), scrape_with_actions (pelaksanaan JS), dan stealth_mode (anti-bot).

Berapakah kos untuk mengindeks 100 halaman dengan CrawlForge + LlamaIndex?+

Halaman statik melalui extract_content berkos 2 credits setiap satu, jadi 100 halaman = 200 credits. Halaman yang dilindungi Cloudflare atau berat JS berkos 5 credits setiap satu (500 credits untuk 100). Kedua-duanya muat di dalam peringkat free 1,000-credit untuk pembinaan indeks sekali sahaja.

Bolehkah CrawlForge bertindak sebagai alat ejen LlamaIndex?+

Ya. Bungkus mana-mana panggilan API CrawlForge dalam LlamaIndex FunctionTool dan daftarkannya dengan ReActAgent atau OpenAIAgent. Ejen memutuskan bila untuk scrape URL atau menjalankan carian web berdasarkan pertanyaan pengguna. Lihat bahagian ejen di atas untuk kod yang berfungsi.

Adakah CrawlForge menyokong transformasi pertanyaan LlamaIndex seperti HyDE?+

CrawlForge ialah sumber data, bukan lapisan perolehan. Transformasi pertanyaan berlaku di dalam LlamaIndex selepas pengingesan. CrawlForge mengembalikan markdown bersih atau data berstruktur yang menyuap VectorStoreIndex -- segala-galanya di hiliran (HyDE, penaakulan berbilang langkah, SubQuestionQueryEngine) berfungsi tanpa berubah.

Bagaimanakah saya memastikan indeks LlamaIndex sentiasa segar dengan data web langsung?+

Jadualkan cron harian yang menjalankan semula CrawlForgeReader anda pada senarai URL yang sama dan membina semula indeks melalui VectorStoreIndex.from_documents. Kerana CrawlForge mengembalikan markdown bersih, dokumen mempunyai bentuk yang sama setiap kali, jadi embedding adalah stabil. Untuk kemas kini tokokan, gunakan API upsert LlamaIndex dengan ID dokumen yang diterbitkan daripada URL.

Artikel Berkaitan

Cara Scrape Tapak Web dengan Claude Code (Panduan 2026)
Tutorials

Cara Scrape Tapak Web dengan Claude Code (Panduan 2026)

Scrape mana-mana tapak web daripada terminal anda dengan Claude Code dan CrawlForge MCP. Fetch halaman, ekstrak data, pintas anti-bot -- dalam masa kurang daripada 2 minit.

C
CrawlForge Team
|
14 Apr
|
10m
Cara Mengikis Tapak Web dalam Cursor IDE dengan CrawlForge MCP
Tutorials

Cara Mengikis Tapak Web dalam Cursor IDE dengan CrawlForge MCP

Jadikan Cursor IDE sebagai stesen kerja web scraping. Sambungkan CrawlForge MCP dan ekstrak data berstruktur daripada mana-mana tapak tanpa meninggalkan editor anda.

C
CrawlForge Team
|
14 Apr
|
9m
Cara Melakukan Scraping Laman Web dalam Zed AI dengan CrawlForge MCP
Tutorials

Cara Melakukan Scraping Laman Web dalam Zed AI dengan CrawlForge MCP

Tambah web scraping ke Zed AI dalam 3 minit. Konfigurasikan CrawlForge MCP dalam Zed supaya editor anda boleh mengambil, mengekstrak, dan menyelidik data web langsung sesuka hati.

C
CrawlForge Team
|
14 Apr
|
9m

Footer

CrawlForge

Web scraping gred perusahaan untuk Ejen AI. 27 alat MCP khusus yang direka untuk pembangun moden yang membina sistem pintar.

Produk

  • Ciri
  • Playground
  • Harga
  • Kes Penggunaan
  • Integrasi
  • Alternatif
  • Changelog

Sumber

  • Mula Bekerja
  • Rujukan API
  • Templat
  • Panduan
  • Blog
  • Glosari
  • Soalan Lazim
  • Peta Laman

Pembangun

  • Protokol MCP
  • Claude Desktop
  • Cursor IDE
  • LangChain
  • LlamaIndex

Syarikat

  • Tentang
  • Hubungi
  • Privasi
  • Terma
  • Penggunaan Boleh Diterima
  • Cookies

Kekal dikemas kini

Dapatkan kemas kini terkini tentang alat dan ciri baharu.

Dibina dengan Next.js dan protokol MCP

© 2025-2026 CrawlForge. Hak cipta terpelihara.