ଅନ୍ୟ ଏକ ପ୍ରକ୍ସି ମାଧ୍ୟମରେ Scrapy GET ପୁନଃ ଚେଷ୍ଟା କରନ୍ତୁ
ପୁନଃ ଚେଷ୍ଟା ବଜେଟକୁ ସମ୍ମାନ କରି ନୂଆ ପ୍ରକ୍ସି ସହିତ ନୂଆ ଅନୁରୋଧ ନିର୍ଧାରିତ କରିବାକୁ Scrapy ର ପୁନଃ ଚେଷ୍ଟା ସହାୟକ ବ୍ୟବହାର କରନ୍ତୁ।
response.request.meta ବଦଳାଇଲେ Python ବସ୍ତୁ ବଦଳେ। ଆଉ ଏକ ଡାଉନଲୋଡ କରିବାକୁ Scrapy କୁ ନିର୍ଧାରଣ କରିବା ପାଇଁ ଆଉ ଏକ Request ଦେବାକୁ ହେବ।
ଆପଣଙ୍କ callback ସ୍ପଷ୍ଟ ଭାବରେ ପୁନଃ ଚେଷ୍ଟା କରିବାକୁ ନିର୍ଣ୍ଣୟ କରୁଥିବା GET ପାଇଁ, 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 କ୍ଷେତ୍ର ହଟାଇଲେ ପୁରୁଣା ମଧ୍ୟସ୍ଥର ହେଡର ଏହି ଚୟନକୁ ଯିବାରୁ ରକ୍ଷା ମିଳେ; ଲାଗୁ ହେଲେ ମିଡଲୱେୟାରକୁ ନୂଆ ପ୍ରକ୍ସି URL ରୁ ନୂଆ ଖାତା ବାହାର କରିବାକୁ ଦିଅନ୍ତୁ।
ଏହି callback-ସ୍ତରର ଚୟନକୁ RetryMiddleware ର ନିଜ ସଂରଚିତ ବିଫଳତାର ସ୍ୱଚାଳିତ ପରିଚାଳନାରୁ ଅଲଗା ରଖନ୍ତୁ। ପୁନଃ ଚେଷ୍ଟା କେଉଁ ସ୍ତରର ତାହା ନିର୍ଣ୍ଣୟ କରନ୍ତୁ ଯାହାଫଳରେ କାର୍ଯ୍ୟ ଦୁଇଟି ସ୍ୱାଧୀନ ବଜେଟ ଖର୍ଚ୍ଚ ନ କରେ। ଉଦାହରଣ ପୁନଃ ଚଲାଯାଇପାରୁଥିବା GET କାର୍ଯ୍ୟ ବିଷୟରେ, ମନମୁଖୀ ଭାବରେ ଦାଖଲ କରାଯାଇଥିବା କାରବାର ପୁନରାବୃତ୍ତି କରିବା ସୁରକ୍ଷିତ ବୋଲି ପ୍ରତିଶ୍ରୁତି ନୁହେଁ।