Կրկին փորձել Scrapy GET-ը այլ պրոքսիի միջոցով
Օգտագործեք Scrapy-ի կրկնափորձի օժանդակը՝ նոր պրոքսիով նոր հարցում պլանավորելու համար՝ պահպանելով կրկնափորձի բյուջեն։
response.request.meta-ն փոխելը փոխում է Python օբյեկտ։ Եվս մեկ ներբեռնում կատարելու համար պետք է Scrapy-ին տալ մեկ այլ Request՝ պլանավորելու համար։
Այն GET-ի համար, որը ձեր callback-ը բացահայտ որոշում է կրկին փորձել, 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-ի օժանդակ է։ Կանչողը պետք է վերադարձնի կամ yield անի ստացված Request-ը, երբ այն հասանելի է։ None նշանակում է, որ օժանդակը հրաժարվել է ևս մեկ կրկնափորձից կիրառելի սահմանում։
Կրկնափորձի օժանդակը պատճենում է հարցումը, թարմացնում դրա կրկնափորձերի հաշվիչը և ապահովում է կրկնափորձին համապատասխան պլանավորողի վարքը։ Նույն URL-ը սովորական նոր հարցումի պես yield անելը կարող է փոխարենը հանդիպել կրկնօրինակների զտմանը։
Օգտագործեք պրոքսի URL, որն աջակցում է միացված HttpProxyMiddleware-ը։ Թույլատրված հանրային GET հարցումների կրկնափորձերի համար HTTP պրոքսիների ցանկից չնույնականացված HTTP թեկնածուն կարող է տրամադրել proxy_url։ Նախկինում կցված proxy-authorization դաշտը մաքրելը խոչընդոտում է հին միջնորդի վերնագրի փոխանցումը այս ընտրությանը. թողեք middleware-ը նոր հաշիվը ստանա նոր պրոքսի URL-ից, երբ դա տեղին է։
Այս callback-մակարդակի ընտրությունը առանձին պահեք RetryMiddleware-ի կողմից իր կազմաձևված ձախողումների ավտոմատ մշակումից։ Որոշեք, թե որ շերտին է պատկանում կրկնափորձը, որպեսզի գործողությունը չծախսի երկու անկախ բյուջե։ Օրինակը վերաբերում է կրկնարկվող GET աշխատանքին, ոչ թե խոստման, որ կամայական ուղարկված գործարքի կրկնումը անվտանգ է։