Scrapy GET-i uuesti proovimine teise puhverserveri kaudu
Kasutage Scrapy korduskatse-abistajat, et uue puhverserveriga uus päring ajastada, järgides korduskatse eelarvet.
response.request.meta muutmine muudab Pythoni objekti. Veel ühe allalaadimise jaoks tuleb Scrapyle anda teine Request, mille ajastada.
GET-i puhul, mille teie callback otsustab selgesõnaliselt uuesti proovida, saab Scrapy avalik korduskatse-abistaja hoida korduskatse arvestust uue päringu juures:
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
See on ämbliku abistaja. Kutsuja peab tulemuseks oleva Requesti tagastama või yieldima, kui see on saadaval. None tähendab, et abistaja keeldus veel ühest korduskkatsest kehtiva piiri sees.
Korduskatse-abistaja kopeerib päringu, uuendab selle korduskatse loendurit ja pakub korduskatse jaoks sobivat ajastaja käitumist. Kui yieldida sama URL-i tavalise uue päringuna, võib hoopis sattuda duplikaatide filtreerimisele.
Kasutage puhverserveri URL-i, mida lubatud HttpProxyMiddleware toetab. Lubatud avalike GET-päringute korduskatseteks võib autentimata HTTP-kandidaat HTTP puhverserverite loendist anda proxy_url. Varem lisatud proxy-authorization välja kustutamine hoiab ära vana vahendaja päise kandmise sellesse valikusse; laske middleware'il vajaduse korral uus konto uuest puhverserveri URL-ist tuletada.
Hoidke see callbacki tasandi valik eraldi RetryMiddleware'i automaatsest seadistatud tõrgete käsitlemisest. Otsustage, milline kiht korduskatse omab, et toiming ei kulutaks kahte sõltumatut eelarvet. Näide puudutab korratavat GET-tööd, mitte lubadust, et suvalise esitatud tehingu kordamine on ohutu.