മറ്റൊരു പ്രോക്സി വഴി 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-ൽ നിന്ന് പുതിയ അക്കൗണ്ട് കണ്ടെത്താൻ middleware-നെ അനുവദിക്കുക.
ഈ callback-തല തിരഞ്ഞെടുപ്പ് RetryMiddleware അതിന്റെ കോൺഫിഗർ ചെയ്ത പരാജയങ്ങൾ സ്വയമേവ കൈകാര്യം ചെയ്യുന്നതിൽ നിന്ന് വേർതിരിക്കുക. വീണ്ടും ശ്രമം ഏത് പാളിക്കാണെന്ന് തീരുമാനിക്കുക, അങ്ങനെ പ്രവർത്തനം രണ്ട് സ്വതന്ത്ര ബജറ്റുകൾ ചെലവഴിക്കില്ല. ഉദാഹരണം വീണ്ടും പ്ലേ ചെയ്യാവുന്ന GET ജോലിയെക്കുറിച്ചാണ്, ഏകപക്ഷീയമായി സമർപ്പിച്ച ഇടപാട് ആവർത്തിക്കുന്നത് സുരക്ഷിതമാണെന്ന വാഗ്ദാനമല്ല.