Scrapy GET újrapróbálása másik proxyn keresztül
Használja a Scrapy újrapróbálkozás-segítőjét új kérés ütemezéséhez új proxyval, tiszteletben tartva az újrapróbálkozási keretet.
A response.request.meta módosítása egy Python-objektumot módosít. Egy újabb letöltéshez új Requestet kell adni a Scrapynak ütemezésre.
Egy GET esetében, amelyet a callbackje kifejezetten újrapróbálni dönt, a Scrapy nyilvános újrapróbálkozás-segítője az új kéréssel együtt vezetheti az újrapróbálkozások elszámolását:
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
Ez egy spider-segítő. A hívónak vissza kell adnia vagy yieldelnie kell az eredményül kapott Requestet, amikor elérhető. A None azt jelenti, hogy a segítő elutasított egy további újrapróbálkozást az alkalmazandó korláton belül.
Az újrapróbálkozás-segítő lemásolja a kérést, frissíti az újrapróbálkozás-számlálóját, és biztosítja az újrapróbálkozáshoz illő ütemező-viselkedést. Ha csupán ugyanazt az URL-t yieldeli közönséges új kérésként, inkább a duplikátumszűrésbe futhat.
Használjon az engedélyezett HttpProxyMiddleware által támogatott proxy-URL-t. Az engedélyezett nyilvános GET-kérések újrapróbálkozásaihoz a HTTP-proxylista hitelesítés nélküli HTTP-jelöltje biztosíthat proxy_url-t. Egy korábban csatolt proxy-authorization mező törlése megakadályozza, hogy egy régi közvetítő fejléce bekerüljön ebbe a kiválasztásba; hagyja, hogy a middleware a megfelelő esetben az új proxy-URL-ből származtassa az új fiókot.
Tartsa ezt a callback-szintű választást külön a RetryMiddleware beállított hibáinak automatikus kezelésétől. Döntse el, melyik réteg birtokolja az újrapróbálkozást, hogy a művelet ne fogyasszon két független keretet. A példa újrajátszható GET-munkára vonatkozik, nem arra az ígéretre, hogy egy tetszőlegesen benyújtott tranzakció megismétlése biztonságos.