Scrapy GET በሌላ ፕሮክሲ በኩል እንደገና ይሞክሩ
የScrapy የድጋሚ ሙከራ አጋዥን ተጠቅመው አዲስ ፕሮክሲ ያለው አዲስ ጥያቄ ያስይዙ፣ የድጋሚ ሙከራ በጀቱን ግን ጠብቀው።
response.request.meta መቀየር የPython ነገርን ይቀይራል። ሌላ ማውረድ ለማድረግ Scrapy ሌላ Request እንዲያስይዝ መስጠት አለብዎት።
ተመላሽ ጥሪዎ በግልጽ እንደገና ለመሞከር ለሚወስነው 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
ይህ የሸረሪት አጋዥ ነው። ጠሪው የተገኘውን Request መመለስ ወይም ማቅረብ አለበት። None ማለት አጋዥው በሚመለከተው ገደብ ስር ሌላ ድጋሚ ሙከራ አልተቀበለም ማለት ነው።
የድጋሚ ሙከራ አጋዥው ጥያቄውን ይቀዳል፣ የድጋሚ ሙከራ ቁጥሩን ያዘምናል እና ለድጋሚ ሙከራ ተስማሚ የሆነውን የመርሐግብር ባህሪ ያቀርባል። ተመሳሳዩን URL እንደ ተራ አዲስ ጥያቄ ማቅረብ በምትኩ የተባዛ ማጣሪያ ሊያጋጥመው ይችላል።
በነቃው HttpProxyMiddleware የሚደገፍ የፕሮክሲ URL ይጠቀሙ። ለተፈቀዱ ይፋዊ GET ጥያቄዎች ድጋሚ ሙከራ፣ ከየHTTP ፕሮክሲ ዝርዝር ያልተረጋገጠ HTTP እጩ proxy_url ሊያቀርብ ይችላል። ቀደም ሲል የተያያዘውን proxy-authorization መስክ ማጽዳት የቀድሞ ድርድር ራስጌ ወደዚህ ምርጫ እንዳይተላለፍ ይከላከላል፤ ሚድልዌሩ አዲሱን መለያ ከአዲሱ የፕሮክሲ URL እንዲያወጣ ይተዉት።
ይህን በተመላሽ ጥሪ ደረጃ የተደረገ ምርጫ ከRetryMiddleware ራስ-ሰር አያያዝ ለያዩት። ስራው ሁለት ገለልተኛ በጀቶችን እንዳይወስድ ድጋሚ ሙከራው የትኛው ንብርብር እንደሚያለው ይወስኑ። ምሳሌው እንደገና ሊከናወን ስለሚችል የGET ስራ ነው፣ የዘፈቀደ የቀረበ ግብይት መደገም ደህንነቱ የተጠበቀ ነው የሚል ቃል አይደለም።