Kubadilisha response.request.meta hubadilisha kitu cha Python. Ili kupakua tena, lazima umpe Scrapy Request nyingine ya kupanga.

Kwa GET ambayo callback yako inaamua waziwazi kuijaribu tena, kisaidizi cha umma cha kujaribu tena cha Scrapy kinaweza kuweka hesabu ya kujaribu tena pamoja na ombi jipya:

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

Hiki ni kisaidizi cha buibui. Mwitaji lazima arudishe au ayield Request inayotokana ikiwa ipo. None inamaanisha kisaidizi kilikataa jaribio lingine la kujaribu tena ndani ya kikomo kinachotumika.

Kisaidizi cha kujaribu tena kinanakili ombi, kinasasisha hesabu ya kujaribu tena na kinatoa tabia ya kipanga inayofaa kwa jaribio la kujaribu tena. Kuweka tu URL hiyo hiyo kama ombi jipya la kawaida kunaweza badala yake kukutana na uchujaji wa nakala.

Tumia URL ya proksi inayoungwa mkono na HttpProxyMiddleware iliyowashwa. Kwa kujaribu tena maombi ya GET ya umma yanayoruhusiwa, mtoaji wa HTTP asiye na uthibitisho kutoka orodha ya proksi za HTTP anaweza kutoa proxy_url. Kufuta uwanja wa proxy-authorization ulioambatishwa awali kunazuia kichwa cha mtu wa kati wa zamani kuingia katika uchaguzi huu; acha middleware ikamilishe akaunti mpya kutoka URL mpya ya proksi inapofaa.

Tenganisha uchaguzi huu wa kiwango cha callback na utunzaji wa kiotomatiki wa RetryMiddleware wa kushindwa kwake vilivyowekwa. Amua safu ipi inamiliki kujaribu tena ili operesheni isitumie bajeti mbili huru. Mfano unahusu kazi ya GET inayoweza kuchezwa tena, si ahadi kwamba kurudia muamala uliowasilishwa kiholela ni salama.

Makala zinazohusiana