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 өрісін тазалау ескі делдалдың тақырыбын осы таңдауға көшіруге жол бермейді; қажет болғанда middleware-ке жаңа аккаунтты жаңа прокси URL-інен шығаруға мүмкіндік беріңіз.

Бұл callback деңгейіндегі таңдауды RetryMiddleware-тің конфигурацияланған сәтсіздіктерін автоматты өңдеуінен бөлек ұстаңыз. Қайталау қай қабатқа тиесілі екенін шешіңіз, сонда операция екі тәуелсіз бюджет жұмсамайды. Мысал қайта ойнатуға болатын GET жұмысы туралы, кездейсоқ жіберілген транзакцияны қайталау қауіпсіз деген уәде емес.

Қатысты мақалалар