توقف عن محاربة أنظمة مكافحة الروبوتات. توقف عن إعادة كتابة المحددات بعد كل تحديث للموقع.
Scrapling ليست مجرد مكتبة أخرى لاستخراج بيانات الويب. إنها أول مكتبة استخراج تكيفية تتعلم من تغييرات المواقع وتتطور معها. بينما تتعطل المكتبات الأخرى عندما تحدث المواقع بنيتها، يعيد Scrapling تحديد موقع عناصرك تلقائياً ويحافظ على عمل أدوات الاستخراج الخاصة بك.
مبني للويب الحديث، يتميز Scrapling بمحرك تحليل سريع خاص به وجوالب للتعامل مع جميع تحديات استخراج بيانات الويب التي تواجهها أو ستواجهها. مبني بواسطة مستخرجي الويب لمستخرجي الويب والمستخدمين العاديين، هناك شيء للجميع.
>>fromscrapling.fetchersimportFetcher,AsyncFetcher,StealthyFetcher,DynamicFetcher>>StealthyFetcher.adaptive=True# احصل على كود المصدر للمواقع بشكل خفي!>>page=StealthyFetcher.fetch('https://example.com',headless=True,network_idle=True)>>print(page.status)200>>products=page.css('.product',auto_save=True)# استخرج البيانات التي تنجو من تغييرات تصميم الموقع!>># لاحقاً، إذا تغيرت بنية الموقع، مرر `adaptive=True`>>products=page.css('.product',adaptive=True)# و Scrapling لا يزال يجدها!
الرعاة
هل تريد عرض إعلانك هنا؟ انقر هنا واختر المستوى الذي يناسبك!
الميزات الرئيسية
جلب متقدم للمواقع مع دعم الجلسات
طلبات HTTP: طلبات HTTP سريعة وخفية مع فئة Fetcher. يمكنها تقليد بصمة TLS للمتصفح والرؤوس واستخدام HTTP3.
التحميل الديناميكي: جلب المواقع الديناميكية مع أتمتة كاملة للمتصفح من خلال فئة DynamicFetcher التي تدعم Chromium من Playwright و Google Chrome.
تجاوز مكافحة الروبوتات: قدرات تخفي متقدمة مع StealthyFetcher وانتحال البصمات. يمكنه تجاوز جميع أنواع Turnstile/Interstitial من Cloudflare بسهولة بالأتمتة.
إدارة الجلسات: دعم الجلسات المستمرة مع فئات FetcherSession وStealthySession وDynamicSession لإدارة ملفات تعريف الارتباط والحالة عبر الطلبات.
دعم Async: دعم async كامل عبر جميع الجوالب وفئات الجلسات async المخصصة.
الاستخراج التكيفي والتكامل مع الذكاء الاصطناعي
🔄تتبع العناصر الذكي: إعادة تحديد موقع العناصر بعد تغييرات الموقع باستخدام خوارزميات التشابه الذكية.
🎯الاختيار المرن الذكي: محددات CSS، محددات XPath، البحث القائم على الفلاتر، البحث النصي، البحث بالتعبيرات العادية والمزيد.
🔍البحث عن عناصر مشابهة: تحديد العناصر المشابهة للعناصر الموجودة تلقائياً.
🤖خادم MCP للاستخدام مع الذكاء الاصطناعي: خادم MCP مدمج لاستخراج بيانات الويب بمساعدة الذكاء الاصطناعي واستخراج البيانات. يتميز خادم MCP بقدرات قوية مخصصة تستفيد من Scrapling لاستخراج المحتوى المستهدف قبل تمريره إلى الذكاء الاصطناعي (Claude/Cursor/إلخ)، وبالتالي تسريع العمليات وتقليل التكاليف عن طريق تقليل استخدام الرموز. (فيديو توضيحي)
بنية عالية الأداء ومختبرة في المعارك
🚀سريع كالبرق: أداء محسّن يتفوق على معظم مكتبات استخراج Python.
🔋فعال في استخدام الذاكرة: هياكل بيانات محسّنة وتحميل كسول لأقل استخدام للذاكرة.
⚡تسلسل JSON سريع: أسرع 10 مرات من المكتبة القياسية.
🏗️مُختبر في المعارك: لا يمتلك Scrapling فقط تغطية اختبار بنسبة 92٪ وتغطية كاملة لتلميحات الأنواع، ولكن تم استخدامه يومياً من قبل مئات مستخرجي الويب خلال العام الماضي.
تجربة صديقة للمطورين/مستخرجي الويب
🎯غلاف استخراج ويب تفاعلي: غلاف IPython مدمج اختياري مع تكامل Scrapling، واختصارات، وأدوات جديدة لتسريع تطوير سكريبتات استخراج الويب، مثل تحويل طلبات curl إلى طلبات Scrapling وعرض نتائج الطلبات في متصفحك.
🚀استخدمه مباشرة من الطرفية: اختيارياً، يمكنك استخدام Scrapling لاستخراج عنوان URL دون كتابة سطر واحد من الكود!
🛠️واجهة برمجة تطبيقات التنقل الغنية: اجتياز DOM متقدم مع طرق التنقل بين الوالدين والأشقاء والأطفال.
📝إنشاء محدد تلقائي: إنشاء محددات CSS/XPath قوية لأي عنصر.
🔌واجهة برمجة تطبيقات مألوفة: مشابه لـ Scrapy/BeautifulSoup مع نفس العناصر الزائفة المستخدمة في Scrapy/Parsel.
📘تغطية كاملة للأنواع: تلميحات نوع كاملة لدعم IDE ممتاز وإكمال الكود.
🔋صورة Docker جاهزة: مع كل إصدار، يتم بناء ودفع صورة Docker تحتوي على جميع المتصفحات تلقائياً.
البدء
الاستخدام الأساسي
fromscrapling.fetchersimportFetcher,StealthyFetcher,DynamicFetcherfromscrapling.fetchersimportFetcherSession,StealthySession,DynamicSession# طلبات HTTP مع دعم الجلساتwithFetcherSession(impersonate='chrome')assession:# استخدم أحدث إصدار من بصمة TLS لـ Chromepage=session.get('https://quotes.toscrape.com/',stealthy_headers=True)quotes=page.css('.quote .text::text')# أو استخدم طلبات لمرة واحدةpage=Fetcher.get('https://quotes.toscrape.com/')quotes=page.css('.quote .text::text')# وضع التخفي المتقدم (احتفظ بالمتصفح مفتوحاً حتى تنتهي)withStealthySession(headless=True,solve_cloudflare=True)assession:page=session.fetch('https://nopecha.com/demo/cloudflare',google_search=False)data=page.css('#padded_content a')# أو استخدم نمط الطلب لمرة واحدة، يفتح المتصفح لهذا الطلب، ثم يغلقه بعد الانتهاءpage=StealthyFetcher.fetch('https://nopecha.com/demo/cloudflare')data=page.css('#padded_content a')# أتمتة المتصفح الكاملة (احتفظ بالمتصفح مفتوحاً حتى تنتهي)withDynamicSession(headless=True)assession:page=session.fetch('https://quotes.toscrape.com/',network_idle=True)quotes=page.css('.quote .text::text')# أو استخدم نمط الطلب لمرة واحدةpage=DynamicFetcher.fetch('https://quotes.toscrape.com/',network_idle=True)quotes=page.css('.quote .text::text')
اختيار العناصر
# محددات CSSpage.css('a::text')# استخراج النصpage.css('a::attr(href)')# استخراج السماتpage.css('a',recursive=False)# العناصر المباشرة فقطpage.css('a',auto_save=True)# حفظ مواضع العناصر تلقائياً# XPathpage.xpath('//a/text()')# بحث مرنpage.find_by_text('Python',first_match=True)# البحث بالنصpage.find_by_regex(r'\d{4}')# البحث بنمط التعبير العاديpage.find('div',{'class':'container'})# البحث بالسمات# التنقلelement.parent# الحصول على العنصر الوالدelement.next_sibling# الحصول على الشقيق التاليelement.children# الحصول على الأطفال# عناصر مشابهةsimilar=page.get_similar(element)# البحث عن عناصر مشابهة# الاستخراج التكيفيsaved_elements=page.css('.product',auto_save=True)# لاحقاً، عندما يتغير الموقع:page.css('.product',adaptive=True)# البحث عن العناصر باستخدام المواضع المحفوظة
استخدام الجلسة
fromscrapling.fetchersimportFetcherSession,AsyncFetcherSession# جلسة متزامنةwithFetcherSession()assession:# يتم الاحتفاظ بملفات تعريف الارتباط تلقائياًpage1=session.get('https://quotes.toscrape.com/login')page2=session.post('https://quotes.toscrape.com/login',data={'username':'admin','password':'admin'})# تبديل بصمة المتصفح إذا لزم الأمرpage2=session.get('https://quotes.toscrape.com/',impersonate='firefox135')# استخدام جلسة asyncasyncwithAsyncStealthySession(max_pages=2)assession:tasks=[]urls=['https://example.com/page1','https://example.com/page2']forurlinurls:task=session.fetch(url)tasks.append(task)print(session.get_pool_stats())# اختياري - حالة مجموعة علامات تبويب المتصفح (مشغول/حر/خطأ)results=awaitasyncio.gather(*tasks)print(session.get_pool_stats())
واجهة سطر الأوامر والغلاف التفاعلي
يتضمن Scrapling v0.3 واجهة سطر أوامر قوية:
تشغيل غلاف استخراج الويب التفاعلي
scrapling shell
استخراج الصفحات إلى ملف مباشرة دون برمجة (يستخرج المحتوى داخل وسم body افتراضياً). إذا انتهى ملف الإخراج بـ .txt، فسيتم استخراج محتوى النص للهدف. إذا انتهى بـ .md، فسيكون تمثيل Markdown لمحتوى HTML؛ إذا انتهى بـ .html، فسيكون محتوى HTML نفسه.
scrapling extract get 'https://example.com' content.md
scrapling extract get 'https://example.com' content.txt --css-selector '#fromSkipToProducts' --impersonate 'chrome'# جميع العناصر المطابقة لمحدد CSS '#fromSkipToProducts'
scrapling extract fetch 'https://example.com' content.md --css-selector '#fromSkipToProducts' --no-headless
scrapling extract stealthy-fetch 'https://nopecha.com/demo/cloudflare' captchas.html --css-selector '#padded_content a' --solve-cloudflare
Note
هناك العديد من الميزات الإضافية، لكننا نريد إبقاء هذه الصفحة موجزة، مثل خادم MCP وغلاف استخراج الويب التفاعلي. تحقق من الوثائق الكاملة هنا
معايير الأداء
Scrapling ليس قوياً فقط - إنه أيضاً سريع بشكل مذهل، والتحديثات منذ الإصدار 0.3 قدمت تحسينات أداء استثنائية عبر جميع العمليات. تقارن المعايير التالية محلل Scrapling مع المكتبات الشائعة الأخرى.
اختبار سرعة استخراج النص (5000 عنصر متداخل)
#
المكتبة
الوقت (ms)
vs Scrapling
1
Scrapling
1.99
1.0x
2
Parsel/Scrapy
2.01
1.01x
3
Raw Lxml
2.5
1.256x
4
PyQuery
22.93
~11.5x
5
Selectolax
80.57
~40.5x
6
BS4 with Lxml
1541.37
~774.6x
7
MechanicalSoup
1547.35
~777.6x
8
BS4 with html5lib
3410.58
~1713.9x
أداء تشابه العناصر والبحث النصي
قدرات العثور على العناصر التكيفية لـ Scrapling تتفوق بشكل كبير على البدائل:
المكتبة
الوقت (ms)
vs Scrapling
Scrapling
2.46
1.0x
AutoScraper
13.3
5.407x
تمثل جميع المعايير متوسطات أكثر من 100 تشغيل. انظر benchmarks.py للمنهجية.
التثبيت
يتطلب Scrapling Python 3.10 أو أعلى:
pip install scrapling
بدءاً من v0.3.2، يتضمن هذا التثبيت فقط محرك المحلل وتبعياته، بدون أي جوالب أو تبعيات سطر أوامر.
التبعيات الاختيارية
إذا كنت ستستخدم أياً من الميزات الإضافية أدناه، أو الجوالب، أو فئاتها، فستحتاج إلى تثبيت تبعيات الجوالب وتبعيات المتصفح الخاصة بها على النحو التالي:
يتم توفير هذه المكتبة للأغراض التعليمية والبحثية فقط. باستخدام هذه المكتبة، فإنك توافق على الامتثال لقوانين استخراج البيانات والخصوصية المحلية والدولية. المؤلفون والمساهمون غير مسؤولين عن أي إساءة استخدام لهذا البرنامج. احترم دائماً شروط خدمة المواقع وملفات robots.txt.
الترخيص
هذا العمل مرخص بموجب ترخيص BSD-3-Clause.
الشكر والتقدير
يتضمن هذا المشروع كوداً معدلاً من:
Parsel (ترخيص BSD) - يستخدم للوحدة الفرعية translator