scrapy rotating proxies

بروكسيات Scrapy الدوارة هي نقاط نهاية IP يتنقل بينها عنكبوت Scrapy، بحيث تصدر الطلبات المتتالية من عناوين مختلفة، مما يقلل احتمال فرض حدود للمعدل وحظر IP. يوضح هذا الدليل كيفية إضافة بروكسيات Scrapy الدوارة إلى مشروع فعلي باستخدام برمجية scrapy-rotating-proxies الوسيطة مع بوابة DataImpulse السكنية الدوارة، ثم التحقق من الإعداد واستكشاف مشكلاته وإصلاحها.

ستثبت البرمجية الوسيطة، وتضبط settings.py، وتربط اكتشاف الحظر وإعادة المحاولة، وتتأكد من أن عنوان IP للخروج يتغير فعلا، ثم تختار بين بوابة دوارة وقائمة بروكسيات ثابتة. كل كتلة تعليمات برمجية أدناه قابلة للتشغيل، وتجد القيود الفعلية موضحة قرب النهاية.

DataImpulse مزود أخلاقي للبروكسيات يقدم أكثر من 90 مليون عنوان IP سكني ومحمول ومن مراكز البيانات في 195 دولة. ويعتمد نموذج الدفع حسب الاستخدام بدءا من 1 دولار لكل GB مع حركة مرور لا تنتهي صلاحيتها، ويستخدم في تجريف الويب والتحقق من الإعلانات ومراقبة الأسعار وأبحاث السوق وإدارة الحسابات المتعددة.

حقائق أساسية

  • الإعداد: تعمل بروكسيات Scrapy الدوارة بتوجيه برمجية scrapy-rotating-proxies الوسيطة إلى قائمة من نقاط نهاية البروكسيات أو إلى بوابة دوارة واحدة مثل gw.dataimpulse.com:823، بحيث يمكن أن يصدر كل طلب من IP مختلف.
  • أفضل نوع بروكسي: بروكسيات سكنية دوارة تستخدم عناوين IP حقيقية للمستهلكين وتتجاوز الاكتشاف.
  • السعر: بدءا من 1 دولار لكل GB، بالدفع حسب الاستخدام، مع حركة مرور لا تنتهي صلاحيتها ومن دون اشتراك.
  • التغطية: أكثر من 90M عنوان IP من مصادر أخلاقية في 195 دولة.
  • الموثوقية: معدل نجاح 99.51%، وتقييم 4.8 من 5 على G2.
  • البروتوكولات والاستهداف: HTTP وHTTPS وSOCKS5، مع تضمين الاستهداف حسب الدولة.
كيف يدور Scrapy البروكسيات مع كل طلب

ما الذي تحتاجه قبل البدء باستخدام بروكسيات scrapy الدوارة؟

تحتاج إلى مشروع Scrapy يعمل، وPython 3.8 أو أحدث، وحزمة scrapy-rotating-proxies، وإمكانية الوصول إلى مجموعة من نقاط نهاية البروكسيات. يوجد منطق التدوير في برمجية وسيطة للتنزيل، لذا لا يلزم تغيير أي شيء في عناكبك.

اجمع ما يلي قبل كتابة التعليمات البرمجية:

  • مشروع Scrapy أُنشئ باستخدام scrapy startproject.
  • برمجية scrapy-rotating-proxies الوسيطة، وهي الحزمة المجتمعية الموثقة في مسار عمل التجريف والمستضافة على GitHub باسم scrapy-rotating-proxies.
  • بيانات اعتماد البروكسي. يستخدم هذا الدليل بروكسيات DataImpulse السكنية، التي توفر بوابة دوارة واحدة إلى جانب دعم HTTP وHTTPS وSOCKS5 والاستهداف حسب الدولة.

ثبت البرمجية الوسيطة في بيئة مشروعك:

pip install scrapy-rotating-proxies

تضيف الحزمة برمجيتين وسيطتين: RotatingProxyMiddleware، التي تعين بروكسيا لكل طلب، وBanDetectionMiddleware، التي تقرر ما إذا كانت الاستجابة تبدو كحظر وتنتقل بعيدا عن IP المتعطل.

كيف تستخدم بروكسيات دوارة في Scrapy؟

تضيف scrapy-rotating-proxies عبر تعريف نقاط نهاية البروكسيات في settings.py وتفعيل برمجيتي التنزيل الوسيطتين. توجد طريقتان لإدخال البروكسيات: قائمة Python مضمنة، أو ملف نصي يُحمّل من مسار.

يستخدم الأسلوب المضمن ROTATING_PROXY_LIST. فعّل البرمجيتين الوسيطتين بالأولويات المعروضة لكي تعملا بالترتيب الصحيح:

# settings.py
ROTATING_PROXY_LIST = [
    'http://user:[email protected]:823',
]

DOWNLOADER_MIDDLEWARES = {
    'rotating_proxies.middlewares.RotatingProxyMiddleware': 610,
    'rotating_proxies.middlewares.BanDetectionMiddleware': 620,
}

لإبقاء بيانات الاعتماد خارج التحكم بالمصادر، استخدم ROTATING_PROXY_LIST_PATH ووجّهه إلى ملف يحتوي على بروكسي واحد في كل سطر:

# settings.py
ROTATING_PROXY_LIST_PATH = 'proxies.txt'
# proxies.txt (one endpoint per line)
http://user:[email protected]:823
http://user:[email protected]:824

بوابة DataImpulse بديل ذو نقطة نهاية واحدة عن الاحتفاظ بقائمة طويلة. ولأن gw.dataimpulse.com:823 يدور IP للخروج بالفعل من جهة المزود، يمكنك إدراج ذلك السطر الواحد وترك طبقتي التدوير تعملان معا: تختار البوابة IP سكنيا جديدا لكل طلب، وتعيد البرمجية الوسيطة المحاولة عبر البوابة نفسها عند وضع علامة حظر على استجابة. هذا أبسط نمط موثوق لمعظم عمليات الزحف.

إذا كنت تفضل تعيين البروكسي لكل طلب بدلا من تعيينه عالميا، فعيّنه عبر request meta في عنكبوت. وهكذا أيضا تضيف مصادقة البروكسي صراحة، وهو ما يغطيه دليل DataImpulse حول مصادقة البروكسي:

import scrapy

class GatewaySpider(scrapy.Spider):
    name = 'gateway'
    urls = ['https://httpbin.org/ip']

    def start_requests(self):
        proxy = 'http://user:[email protected]:823'
        for url in self.urls:
            yield scrapy.Request(url, meta={'proxy': proxy}, dont_filter=True)

كيف تتحقق من أن البروكسيات الدوارة تعمل في Scrapy؟

تتحقق من التدوير بإرسال عدة طلبات إلى نقطة نهاية تعكس IP والتأكد من تغير IP المصدر المبلّغ عنه بين الاستجابات. يعيد httpbin.org/ip عنوان IP لخروج المتصل، مما يجعله فحصا سريعا.

أضف عنكبوتا صغيرا يطلب نقطة نهاية الانعكاس 10 مرات ويسجل كل IP للخروج:

import scrapy

class IPCheckSpider(scrapy.Spider):
    name = 'ipcheck'
    start_urls = ['https://httpbin.org/ip'] * 10

    def parse(self, response):
        self.logger.info('Exit IP: %s', response.json()['origin'])

شغّله من جذر المشروع:

scrapy crawl ipcheck

ينبغي أن ترى في السجل عدة قيم مختلفة لـ Exit IP. إذا أظهر كل سطر العنوان نفسه، فالتدوير غير نشط: تأكد من تفعيل البرمجيات الوسيطة، ومن أن ROTATING_PROXY_LIST ليست فارغة، وأن الطلبات لا تُخدم من ذاكرة التخزين المؤقت HTTP. تسجل البرمجية الوسيطة أيضا حالة البروكسيات، لذا راقب الأسطر التي تتحدث عن بروكسيات جيدة وميتة ومعاد إحياؤها للتأكد من أنها تدير المجموعة.

كيف تستكشف أخطاء الحظر و407 في بروكسيات scrapy الدوارة وتصلحها؟

ترجع معظم مشكلات التدوير إلى سؤالين: هل تكتشف البرمجية الوسيطة عمليات الحظر على نحو صحيح، وهل مصادقة البروكسي مضبوطة؟ يسمح اكتشاف الحظر الضعيف لـ IP المحظور بمواصلة تقديم استجابات غير مفيدة، بينما يعيد تسجيل الدخول غير المضبوط HTTP 407.

لجعل اكتشاف الحظر مقصودا بدلا من التخمين، يقترح هذا الدليل نموذج اكتشاف الحظر بأربع إشارات لـ Scrapy. يقيّم كل استجابة بناء على أربع إشارات مستقلة لكي لا تستبعد نتيجة إيجابية كاذبة واحدة بروكسيا سليما:

  • رمز الحالة: اعتبر 403 و429 و503 مرشحات للحظر، و200 و301 و302 سليمة.
  • وجهة إعادة التوجيه: إن إعادة توجيه 302 إلى مسار تسجيل دخول أو اختبار تحقق أو تحدّ تمثل حظرا خفيفا حتى لو بدت الحالة سليمة.
  • بصمة النص: افحص النص بحثا عن مؤشرات مثل captcha أو رفض الوصول أو حمولة فارغة لا يمكن لصفحة حقيقية أن تعيدها.
  • زمن الاستجابة: غالبا ما تشير استجابة أبطأ كثيرا من المتوسط المتحرك إلى تقييد قبل الحظر التام.

شفّر هذه السياسة في صنف وسجله لكي تستخدم BanDetectionMiddleware منطقك بدلا من المنطق الافتراضي:

# ban_policy.py
class DataImpulseBanPolicy:
    NOT_BAN_STATUSES = {200, 301, 302}

    def response_is_ban(self, request, response):
        if response.status in (403, 429, 503):
            return True
        if b'captcha' in response.body.lower():
            return True
        if not response.body:
            return True
        return False

    def exception_is_ban(self, request, exception):
        return True
# settings.py
ROTATING_PROXY_BAN_POLICY = 'myproject.ban_policy.DataImpulseBanPolicy'

اجمع بين الاكتشاف وإعادة المحاولة والتراجع التدريجي لكي ينتقل الطلب الذي وُضعت عليه علامة إلى IP جديد بدلا من أن يفشل. يتعامل Scrapy مع رموز إعادة المحاولة، وتتعامل البرمجية الوسيطة مع إعادة محاولة البروكسي لكل صفحة:

# settings.py
RETRY_ENABLED = True
RETRY_TIMES = 5
RETRY_HTTP_CODES = [403, 407, 429, 500, 502, 503, 504]
ROTATING_PROXY_PAGE_RETRY_TIMES = 5

أضف تقييدا كي لا تستنفد المجموعة. يفصل DOWNLOAD_DELAY بين الطلبات، ويكيّف AUTOTHROTTLE التأخير مع زمن استجابة الخادم:

# settings.py
DOWNLOAD_DELAY = 1.0
CONCURRENT_REQUESTS = 16
AUTOTHROTTLE_ENABLED = True
AUTOTHROTTLE_START_DELAY = 1.0
AUTOTHROTTLE_MAX_DELAY = 10.0
AUTOTHROTTLE_TARGET_CONCURRENCY = 4.0

إذا أعادت الطلبات HTTP 407، فقد رفض البروكسي بيانات اعتمادك بدلا من أن يحظرك الموقع المستهدف. تحقق من أن اسم المستخدم وكلمة المرور مضمنان في URL البروكسي تماما كما صدرا، وأنهما مرمزان وفق URL إذا احتويا على محارف خاصة. التشخيص الكامل في دليل DataImpulse حول خطأ HTTP 407. تحتاج المواقع التي لا تكشف المحتوى إلا بعد تنفيذ JavaScript إلى طبقة بلا واجهة أيضا، ويغطي ذلك دليل كيفية تجريف صفحات الويب الديناميكية.

أي إعداد لبروكسيات دوارة يناسب مشروع Scrapy الخاص بك؟

استخدم بوابة دوارة لمعظم عمليات الزحف، وقائمة بروكسيات ثابتة عندما تحتاج إلى التحكم في عناوين IP الفردية، وبرمجية وسيطة مخصصة فقط عندما تكون قواعد تدويرك غير اعتيادية. يعتمد القرار على مقدار التحكم الذي تحتاجه مقابل مقدار البنية التي تريد صيانتها.

تجعل مصفوفة القرار التالية الأمر واضحا:

  • استخدم البوابة الدوارة عندما تريد تنوعا في IP لكل طلب عبر نقطة نهاية واحدة، أو عندما يفرض الهدف حدودا للمعدل حسب IP، أو عندما تفضل ألا تدير ملف بروكسيات مطلقا.
  • استخدم قائمة بروكسيات ثابتة عندما تحتاج إلى جلسات قابلة للتكرار، أو تريد تثبيت مناطق محددة لكل عنكبوت، أو يجب عليك تدقيق نقاط النهاية المستخدمة تحديدا.
  • تجنب البرمجية الوسيطة المخصصة عندما تغطي scrapy-rotating-proxies احتياجاتك بالفعل، لأن البرمجية الوسيطة المصممة خصيصا تضيف عبء الصيانة وأخطاءها الخاصة في اكتشاف الحظر.
  • تجنب البوابة الدوارة عندما يتطلب مسار العمل الاحتفاظ بـ IP نفسه خلال تسجيل دخول متعدد الخطوات، إذ تكون الجلسة الثابتة هي الأداة المناسبة بدلا من ذلك.

إليك مقارنة بين الأساليب الثلاثة:

الأسلوب التحكم في التدوير جهد الإعداد أفضل استخدام
بوابة دوارة (نقطة نهاية واحدة) المزود يدور مع كل طلب الأقل، سطر واحد في الإعدادات عمليات زحف كبيرة، وحدود معدل تعتمد على IP
ملف قائمة بروكسيات البرمجية الوسيطة تتنقل بين نقاط نهايتك متوسط، حافظ على ملف بروكسيات تثبيت المنطقة، مجموعات قابلة للتدقيق
برمجية وسيطة مخصصة كامل، تكتب المنطق بنفسك الأعلى، تعليمات برمجية واختبارات قواعد تدوير غير قياسية

توفر DataImpulse التدوير من بوابتها وتدعم أيضا الجلسات الثابتة عندما تحتاج إلى استمرارية، لذلك تبدأ فرق كثيرة بالبوابة وتحجز ملفات القوائم للعناكب القليلة التي يجب أن تثبت منطقة. إذا كانت التكلفة والسرعة أهم من موثوقية البروكسيات السكنية، فإن بروكسيات مراكز البيانات وبروكسيات المحمول بدائل ضمن الحساب نفسه.

ما قيود ومخاطر البروكسيات الدوارة في Scrapy؟

تقلل البروكسيات الدوارة عمليات الحظر المعتمدة على IP، لكنها لا تجعل أداة التجريف غير مرئية ولا تصلح عنكبوتا سيئ السلوك. التدوير طبقة واحدة، وليس ضمانا.

ضع هذه القيود في الحسبان:

  • التدوير لا يهزم البصمة الرقمية. تحدد المواقع أيضا خصائص الرؤوس وتواقيع TLS والسلوك، لذا قد توضع علامة على IP جديد يستخدم وكيل مستخدم Scrapy الافتراضي.
  • تظل اختبارات captcha ظاهرة. يقلل IP الدوار من تكرار ظهورها لكنه لا يحلها، وما زلت تحتاج إلى استراتيجية captcha أو زحف أبطأ.
  • عدم تطابق الموقع الجغرافي يسبب تشويشا. إذا استهدفت دولة لكنك تطلب صفحات محلية تتوقع منطقة أخرى، فقد تبدو الاستجابات خاطئة حتى عندما يعمل التدوير.
  • التزامن المفرط يأتي بنتائج عكسية. يستنفد عدد كبير من الطلبات المتوازية المجموعة ويرفع معدلات الحظر، ولهذا يهم AUTOTHROTTLE.
  • تنطبق القيود القانونية وقيود الشروط. التدوير أداة للموثوقية وليس إذنا، فاحترم تعليمات برامج الزحف وحدود المعدل والقانون المعمول به.

من حيث النطاق، ينبغي أن يكون واضحا ماهية DataImpulse: شبكة بروكسيات أخلاقية قائمة على الاشتراك الاختياري تضم أكثر من 90M عنوان IP في 195 دولة، والدفع فيها حسب الاستخدام بدءا من 1 دولار لكل GB، ومعدل نجاحها 99.51%. وهي ليست API مدارة للتجريف تعيد بيانات محللة، ولا تبيع بروكسيات ISP ثابتة، وليست بروكسيا مجانيا للويب. لا يزال Scrapy ينفذ الزحف، والبروكسيات تغير فقط موضع خروج الطلبات.

اكتشاف الحظر بأربع إشارات في البرمجية الوسيطة الدوارة

الأسئلة الشائعة

كيف تستخدم بروكسيات دوارة في Scrapy؟

ثبت scrapy-rotating-proxies، وأضف نقاط نهايتك إلى ROTATING_PROXY_LIST أو ROTATING_PROXY_LIST_PATH في settings.py، وفعّل برمجيتَي التنزيل الوسيطتين RotatingProxyMiddleware وBanDetectionMiddleware. عندئذ يصدر كل طلب من IP دوار.

ما الفرق بين بوابة دوارة وقائمة بروكسيات؟

البوابة الدوارة هي نقطة نهاية واحدة تغير IP للخروج من جهة المزود لكل طلب، لذا تضبط سطرا واحدا. تمنحك قائمة البروكسيات نقاط نهاية كثيرة تتنقل بينها البرمجية الوسيطة، وهذا أفضل عندما تحتاج إلى تثبيت مناطق أو تدقيق عناوين IP محددة.

لماذا أتلقى خطأ HTTP 407 مع بروكسيات scrapy الدوارة؟

يعني HTTP 407 أن البروكسي رفض مصادقتك، وليس أن الموقع المستهدف حظرك. تأكد من تضمين اسم المستخدم وكلمة المرور في URL البروكسي ومن ترميزهما وفق URL إذا احتويا على محارف خاصة.

كيف يمكنني تأكيد أن بروكسيات Scrapy الخاصة بي تدور فعلا؟

أرسل عدة طلبات إلى نقطة نهاية تعكس IP مثل httpbin.org/ip وسجل حقل المصدر. إذا تغير IP المبلّغ عنه بين الاستجابات، فالتدوير نشط؛ وإذا بقي كما هو، فتحقق من تفعيل البرمجيات الوسيطة ومن إيقاف ذاكرة التخزين المؤقت HTTP.

هل توقف البروكسيات الدوارة جميع عمليات الحظر أثناء التجريف؟

لا. يقلل التدوير حدود المعدل وعمليات الحظر المعتمدة على IP، لكن المواقع تستخدم أيضا البصمة الرقمية واختبارات captcha وفحوص السلوك. اجمع التدوير مع تأخيرات معقولة ورؤوس واقعية وAUTOTHROTTLE لعمليات زحف موثوقة.

متى لا تكون DataImpulse الخيار المناسب؟

إذا كنت تحتاج إلى بروكسيات ISP ثابتة، أو API مدارة بالكامل للتجريف، أو الوصول إلى المواقع المصرفية والحكومية، فإن DataImpulse ليست الأداة المناسبة. فهي تركز على البروكسيات السكنية والمحمولة وبروكسيات مراكز البيانات الدوارة لجمع البيانات العامة والوصول إلى المحتوى.

ابدأ استخدام البروكسيات الدوارة في Scrapy

وجّه scrapy-rotating-proxies إلى بوابة DataImpulse دوارة ودع كل طلب يصدر من IP سكني جديد. يمكنك إنشاء حساب بالدفع حسب الاستخدام بدءا من 1 دولار لكل GB وإضافة سطر البوابة مباشرة إلى settings.py.


Share article: