Crawl4AI และ Firecrawl กลายเป็นวิธีมาตรฐานในการป้อนข้อมูลเว็บเข้าสู่ไปป์ไลน์ LLM — มันคลาน เรนเดอร์ แล้วส่ง Markdown ที่สะอาดและพร้อมใช้กลับมาให้โมเดลของคุณใช้งานได้จริง จากนั้นพอคุณเล็งมันไปที่เป้าหมายจริง คุณก็จะค้นพบสิ่งที่ทุก scraper เรียนรู้ในที่สุด นั่นคือ ชั้นการดึงข้อมูลไม่เคยเป็นส่วนที่ยากเลย ส่วนที่ยากคือ crawler ของคุณทำงานจาก IP ดาต้าเซ็นเตอร์เพียงตัวเดียว และเว็บก็มองเห็นมัน
คู่มือนี้แสดงการตั้งค่า proxy ที่ใช้งานได้จริงสำหรับทั้งสองเครื่องมือ — Crawl4AI แบบ self-hosted และ Firecrawl ทั้งสองโหมด — พร้อมกลยุทธ์เซสชันที่หยุดไม่ให้งาน ingestion สำหรับ RAG ตายตั้งแต่หน้าที่ 50 มันต่อยอดจากคู่มือ proxy สำหรับ AI agentและคู่มือ browser-useของเราไปยังเฟรมเวิร์กการคลานเว็บ
Crawl4AI (โอเพนซอร์ส, self-hosted) รับ proxy ที่ระดับ BrowserConfig — หนึ่ง proxy ต่อหนึ่ง crawler instance:
from crawl4ai import AsyncWebCrawler, BrowserConfig, CrawlerRunConfig
browser_cfg = BrowserConfig(
headless=True,
proxy_config={
"server": "us.jibaoproxy.com:913",
"username": "USERNAME",
"password": "PASSWORD",
},
)
async with AsyncWebCrawler(config=browser_cfg) as crawler:
result = await crawler.arun(
url="https://example.com/docs",
config=CrawlerRunConfig(),
)
print(result.markdown[:500])
สำหรับการคลานเชิงลึก ให้หมุนเปลี่ยนตัวตนต่อ crawler instance ไม่ใช่ต่อหน้า — หน้าต่าง ๆ ภายในการเข้าชมไซต์เดียวควรใช้ exit IP เดียวร่วมกัน (คนจริงไม่เปลี่ยนเมืองระหว่างหน้า 3 กับหน้า 4):
def crawler_for(site_id: str) -> BrowserConfig:
# Sticky session per site: cookies + IP move together
return BrowserConfig(
headless=True,
proxy_config={
"server": "us.jibaoproxy.com:913",
"username": f"USERNAME-session-{site_id}",
"password": "PASSWORD",
},
)
# site A crawled through exit A, site B through exit B, in parallel
Cloud API: การใช้ proxy เป็นพารามิเตอร์ของคำขอ — Firecrawl กำหนดเส้นทางผ่านพูลของตัวเอง คุณควบคุมระดับคุณภาพได้ แต่ไม่ใช่ตัว IP:
from firecrawl import FirecrawlApp
app = FirecrawlApp(api_key="fc-YOUR-KEY")
result = app.scrape_url(
"https://example.com/pricing",
params={"proxy": "stealth"}, # basic | stealth | auto
)
ข้อเสีย: คำขอระดับ stealth คิดเครดิตเป็นหลายเท่าของระดับ basic และคุณไม่สามารถปักหมุดประเทศได้แม่นยำหรือคงเซสชัน sticky ข้ามคอลได้ เหมาะกับหน้าที่ดึงเป็นครั้งคราว แต่แพงและไม่แม่นยำเมื่อทำที่ระดับปริมาณ ingestion
Firecrawl แบบ self-hosted: คุณจัดหา proxy ของคุณเองผ่าน environment variable พร้อมการควบคุมเต็มที่:
# .env for self-hosted Firecrawl
PROXY_SERVER=http://us.jibaoproxy.com:1000
PROXY_USERNAME=USERNAME
PROXY_PASSWORD=PASSWORD
การตั้งค่าแบบ self-hosted + เกตเวย์ residential ของคุณเองคือการตั้งค่าที่คุ้มค่าทางต้นทุนเมื่อคุณทำ ingestion ในระดับใหญ่: คุณจ่ายต่อ GB สำหรับแบนด์วิดท์แทนที่จะจ่ายเครดิตต่อหน้าพร้อมตัวคูณ stealth
semaphore_count / delay ของ Crawl4AI มีไว้เพื่อสิ่งนี้ — 2–4 หน้าพร้อมกันต่อไซต์ก็มากพอแล้ว ให้กระจายการทำงานขนานข้ามไซต์แทนETag/Last-Modified เมื่อเฟรมเวิร์กอนุญาต| การตั้งค่า | คุณจ่ายค่าอะไร | เหมาะสุดเมื่อ |
|---|---|---|
| Firecrawl cloud, stealth proxy | เครดิตต่อหน้า × ตัวคูณ stealth | ปริมาณน้อย ไม่มีงาน ops |
| Firecrawl self-hosted + residential GB | แบนด์วิดท์เท่านั้น (~$10/GB) | ปริมาณ ingestion สม่ำเสมอ |
| Crawl4AI + residential GB | แบนด์วิดท์เท่านั้น ควบคุมเต็มที่ | ไปป์ไลน์กำหนดเอง การคลานเชิงลึก |
หน้าที่มีข้อความเยอะ ๆ ทั่วไปจะกินราว 100–300 KB ผ่าน proxy — ประมาณ 3,000–10,000 หน้าต่อ GB ลูปแบบบล็อกแล้วลองใหม่นี่แหละที่ทำให้งบบาน ซึ่งเป็นอีกเหตุผลที่ควรแก้ปัญหาการตรวจจับก่อนขยายปริมาณ
proxy_config ใน BrowserConfig ตัวตน sticky ต่อไซต์ หมุนเปลี่ยนระหว่างไซต์proxy: "stealth" แพงเมื่อปริมาณมาก; self-hosted: เกตเวย์ของคุณเองผ่าน env varsExit residential เซสชัน sticky ราคาต่อ GB — 500MB ทราฟฟิกฟรี ไม่ต้องใช้บัตร
เริ่มทดลองใช้ฟรีผู้ใช้ใหม่รับ 500MB เมื่อสมัครสมาชิก พร้อมโบนัสในการเติมเงินครั้งแรก ข้อเสนอมีระยะเวลาจำกัด