
احصل على بيانات الويب لوكلاء الذكاء الاصطناعي ونماذج اللغات الكبيرة (LLMs)
أسرع محرك لزحزحة الويب واستخراج البيانات مكتوب بلغة Rust.
يُعد Spider محرك زحف يركز على التزامن، مُكتبًا بلغة Rust. يقوم بتدفق الصفحات فور وصولها، ويعرض أكواد JavaScript فقط على الصفحات التي تحتاج إليها، ويتوسع من سكريبت واحد إلى مجموعة موزعة دون تعديل الكود الخاص بك. يعمل نفس المحرك على تشغيل Spider Cloud، مما يتيح لك النموذج الأولي محليًا والانتقال إلى البنية التحتية المُدارة بتغيير إعداد واحد فقط.
أصعب جزء في الزحف على نطاق واسع ليس هو الكود البرمجي. بل يتعلق بالوكلاء (proxies)، والمتصفحات بدون واجهة (headless browsers)، والتقلبات المستمرة في أنظمة مكافحة الروبوتات. تقوم Spider Cloud بتشغيل كل ذلك نيابةً عنك خلف نفس واجهة برمجة التطبيقات (API).
احصل على مفتاح API مجاني → (لا حاجة لبطاقة ائتمان)
[dependencies]
spider = { version = "2", features = ["spider_cloud"] }
use spider::configuration::{SpiderCloudConfig, SpiderCloudMode};
use spider::website::Website;
let cloud = SpiderCloudConfig::new("sk-...")
.with_mode(SpiderCloudMode::Smart); // proxy by default, stealth scrape when blocked
let mut website = Website::new("https://example.com")
.with_spider_cloud_config(cloud)
.build()?;
تعمل وضع Smart على توجيه الطلبات عبر الوكلاء أولاً، ثم يتصاعد إلى /scrape المخفي فقط للصفحات التي تقاوم، لذا تدفع مقابل تجاوز الحواجز فقط حيثما يكون ذلك ضروريًا.
لا مفتاح، لا خدمة. مجرد محرك الزحف.
[dependencies]
spider = "2"
use spider::{tokio, website::Website};
#[tokio::main]
async fn main() {
let mut website = Website::new("https://example.com");
let mut rx = website.subscribe(16);
tokio::spawn(async move {
while let Ok(page) = rx.recv().await {
println!("{} {}", page.status_code, page.get_url());
}
});
website.crawl().await;
website.unsubscribe();
}
تتم معالجة الصفحات وتدفقها بمجرد جلبها. يجد محرك الزحف الروابط، ويبقى ضمن الحدود التي تحددها، ويتوقف تلقائيًا.
يعمل Spider باتباع نهج HTTP أولاً، ولا يشغل متصفح Chrome بدون واجهة إلا عند الحاجة إلى JavaScript. كلا المسارين (HTTP وChrome) يدعمان التدفق، لذا تعود الصفحات فور جلبها بدلاً من تجميعها في النهاية. تستخدم نفس واجهة برمجة التطبيقات لتشغيل مهمة غير متزامنة واحدة أو مجموعة عمالة موزعة، ولا يتغير نموذج التزامن بينهما. تم دمج الوكلاء، وإعادة المحاولة، وتحديد معدل الطلبات، ووضع التخفي بشكل مدمج.
| المطلوب… | الأمر |
|---|---|
| مكتبة Rust | cargo add spider |
| أداة سطر الأوامر | cargo install spider_cli |
| حزمة Node.js | npm i @spider-rs/spider-rs |
| حزمة Python | pip install spider_rs |
| خادم MCP (Claude, Cursor، …) | cargo install spider_mcp |
| زحف مُدار | spider.cloud |
كل خيار له قيمة افتراضية منطقية، لذا قم بتعيين ما تحتاجه فقط.
let mut website = Website::new("https://example.com")
.with_limit(50) // concurrent requests
.with_depth(10) // how deep to follow links
.with_delay(500) // pause between requests (ms)
.with_respect_robots_txt(true)
.with_subdomains(true)
.with_user_agent(Some("MyBot/1.0"))
.with_stealth(true)
.build()
.unwrap();
المراجع الكاملة في توثيق Configuration.
بالنسبة للمواقع الثقيلة بـ JavaScript، فعّل features = ["chrome"] واستدعِ crawl_smart(). يحاول Spider استخدام HTTP أولاً ولا يشغل Chrome إلا على الصفحات التي تحتاج إليه.
تستخدم الفرق Spider لإدخال محتوى الويب المفتوح في مستودعات المتجهات لخطوط أنابيب LLM وRAG، ومراقبة المواقع للتغيرات في تحسين محركات البحث والأسعار، وتصدير الصفحات بتنسيق Markdown أو JSON أو WARC، وتشغيل متصفح Chrome بدون واجهة لوكلاء تصفح الذكاء الاصطناعي. تتوفر أكثر من 50 مثالاً قابلاً للتنفيذ للبدء منها.
نرحب بطلبات الدمج (PRs). انظر CONTRIBUTING.md.
cargo test -p spider # unit tests
RUN_LIVE_TESTS=1 cargo test # live network tests
MIT.