د 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 کار په اړه ده، نه دا ژمنه چې د خپل سري سپارل شوې معاملې تکرارول خوندي دي.