کسی اور پراکسی کے ذریعے Scrapy GET دوبارہ آزمائیں
Scrapy کے دوبارہ کوشش کے مددگار کو استعمال کرتے ہوئے نئی پراکسی کے ساتھ نیا درخواست شیڈول کریں اور دوبارہ کوشش کے بجٹ کا احترام کریں۔
response.request.meta کو بدلنا Python آبجیکٹ بدلتا ہے۔ ایک اور ڈاؤن لوڈ کے لیے Scrapy کو شیڈول کرنے کے لیے دوسری Request دینی ہوگی۔
جس GET کو آپ کا callback واضح طور پر دوبارہ آزمانے کا فیصلہ کرتا ہے، اس کے لیے Scrapy کا عوامی دوبارہ کوشش مددگار نئی درخواست کے ساتھ دوبارہ کوشش کا حساب رکھ سکتا ہے:
from scrapy.downloadermiddlewares.retry import get_retry_request
def retry_through(self, response, proxy_url):
retry = get_retry_request(
response.request,
spider=self,
reason='choose_another_proxy',
)
if retry is None:
return None
retry.meta['proxy'] = proxy_url
retry.headers.pop('Proxy-Authorization', None)
return retry
یہ spider مددگار ہے۔ بلانے والے کو نتیجے میں آنے والی Request دستیاب ہونے پر واپس دینی یا yield کرنی چاہیے۔ None کا مطلب ہے کہ مددگار نے قابلِ اطلاق حد میں ایک اور دوبارہ کوشش سے انکار کیا۔
دوبارہ کوشش کا مددگار درخواست کی نقل بناتا ہے، اس کی دوبارہ کوششوں کی گنتی اپ ڈیٹ کرتا ہے اور دوبارہ کوشش کے لیے موزوں شیڈیولر رویہ فراہم کرتا ہے۔ صرف وہی URL عام نئی درخواست کے طور پر yield کرنے سے بجائے اس کے نقول کی فلٹرنگ کا سامنا ہو سکتا ہے۔
فعال HttpProxyMiddleware کی معاونت کردہ پراکسی URL استعمال کریں۔ اجازت یافتہ عوامی GET درخواستوں کی دوبارہ کوششوں کے لیے، HTTP پراکسی فہرست سے بغیر تصدیق شدہ HTTP امیدوار proxy_url فراہم کر سکتا ہے۔ پہلے منسلک proxy-authorization فیلڈ صاف کرنے سے پرانے ثالث کی ہیڈر اس انتخاب میں آنے سے بچتی ہے؛ جہاں لاگو ہو، middleware کو نئی پراکسی URL سے نیا اکاؤنٹ اخذ کرنے دیں۔
اس callback سطح کے انتخاب کو RetryMiddleware کی اپنی ترتیب شدہ ناکامیوں کی خودکار معاونت سے الگ رکھیں۔ فیصلہ کریں کہ دوبارہ کوشش کس طبقے کی ہے تاکہ عمل دو آزاد بجٹ استعمال نہ کرے۔ مثال دوبارہ چلائی جا سکنے والی GET کام کے بارے میں ہے، یہ وعدہ نہیں کہ کوئی بھی جمع کرائی گئی ٹرانزیکشن دہرانا محفوظ ہے۔