Scrapy GET bat berriro saiatu beste proxy baten bidez
Erabili Scrapyren berriro saiatzeko laguntzailea proxy berri batekin eskaera berria programatzeko, berriro saiatzeko aurrekontua errespetatuz.
response.request.meta aldatzeak Python objektu bat aldatzen du. Beste deskarga bat egiteko, Scrapyri programatzeko beste Request bat eman behar zaio.
Zure callback-ak berriro saiatzea berariaz erabakitzen duen GET baterako, Scrapyren berriro saiatzeko laguntzaile publikoak berriro saiatzearen kontabilitatea eskaera berriarekin mantendu dezake:
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
Hau spider laguntzaile bat da. Deitzaileak lortutako Request itzuli edo yield egin behar du eskuragarri dagoenean. None-k esan nahi du laguntzaileak beste berriro saiatze bat ukatu zuela aplikagarria den muga barruan.
Berriro saiatzeko laguntzaileak eskaera kopiatzen du, berriro saiatzeen kontagailua eguneratzen du eta berriro saiatze baterako egokia den programatzaile-portaera ematen du. URL bera eskaera berri arrunt gisa yield eginez gero, bikoiztuen iragazketarekin topo egin dezakezu.
Erabili gaitutako HttpProxyMiddleware-k onartzen duen proxy URL bat. Baimendutako GET eskaera publikoen berriro saiatzeetarako, HTTP proxy zerrendako HTTP hautagai autentifikatu gabe batek proxy_url eman dezake. Aurretik erantsitako proxy-authorization eremua garbitzeak bitartekari zahar baten goiburua hautaketa honetara eramatea saihesten du; utzi middlewareari kontu berria proxy URL berritik eratortzen dagokionean.
Mantendu callback mailako hautaketa hau RetryMiddleware-k bere konfiguratutako hutsegiteen automatikoki kudeatzetik bereizita. Erabaki zein geruzak duen berriro saiatzea, eragiketak bi aurrekontu independente ez kontsumitzeko. Adibidea errepika daitekeen GET lanari buruzkoa da, ez edozein transakzio bidaliren errepikatzea segurua dela prometatzeko.