Ndryshimi i response.request.meta ndryshon një objekt Python. Për të bërë një shkarkim tjetër, duhet t'i jepni Scrapy një Request tjetër për të planifikuar.

Për një GET që callback-u juaj vendos shprehimisht ta ripërpiqet, ndihmësi publik i ripërpjekjes i Scrapy mund ta mbajë llogaritjen e ripërpjekjeve me kërkesën e re:

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

Ky është një ndihmës spider. Thirrësi duhet ta kthejë ose ta yield-ojë Request-in që rezulton kur një i tillë është i disponueshëm. None do të thotë që ndihmësi refuzoi një ripërpjekje tjetër brenda kufirit të zbatueshëm.

Ndihmësi i ripërpjekjes e kopjon kërkesën, përditëson numëruesin e ripërpjekjeve dhe ofron sjelljen e planifikuesit të përshtatshme për një ripërpjekje. Thjesht yield-imi i të njëjtit URL si një kërkesë e re e zakonshme mund të hasë në filtrimin e dublikatave.

Përdorni një URL proxyje të mbështetur nga HttpProxyMiddleware i aktivizuar. Për ripërpjekjet e kërkesave publike GET të lejuara, një kandidat HTTP i paautentikuar nga lista e proxyve HTTP mund të sigurojë proxy_url. Pastrimi i një fushe proxy-authorization të bashkangjitur më parë shmang mbartjen e kokës së një ndërmjetësi të vjetër në këtë zgjedhje; lëreni middleware-in ta nxjerrë llogarinë e re nga URL-ja e re e proxy-t kur zbatohet.

Mbajeni këtë zgjedhje në nivel callback të ndarë nga trajtimi automatik i RetryMiddleware për dështimet e tij të konfiguruara. Vendosni cila shtresë zotëron ripërpjekjen, që operacioni të mos konsumojë dy buxhete të pavarura. Shembulli ka të bëjë me punë GET të riprodhueshme, jo me premtimin se përsëritja e një transaksioni të dërguar në mënyrë arbitrare është e sigurt.

Artikuj të ngjashëm