மற்றொரு ப்ராக்ஸி வழியாக Scrapy GET ஐ மீண்டும் முயற்சிக்கவும்
மறுமுயற்சி பட்ஜெட்டை மதித்து, புதிய ப்ராக்ஸியுடன் புதிய கோரிக்கையை திட்டமிட Scrapy இன் மறுமுயற்சி உதவியைப் பயன்படுத்தவும்.
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 புலத்தை அழிப்பது பழைய இடைநிலையாளரின் தலைப்பு இந்தத் தேர்வுக்குள் வருவதைத் தவிர்க்கிறது; பொருந்தும் போது புதிய ப்ராக்ஸி URL இலிருந்து புதிய கணக்கை மிடில்வேர் பெற அனுமதிக்கவும்.
இந்த callback-நிலைத் தேர்வை RetryMiddleware அதன் உள்ளமைக்கப்பட்ட தோல்விகளைத் தானாகக் கையாள்வதிலிருந்து தனியாக வைத்திருங்கள். மறுமுயற்சி எந்த அடுக்குக்கு சொந்தம் என்று முடிவு செய்யுங்கள், அதனால் செயல்பாடு இரண்டு சுயாதீன பட்ஜெட்டுகளைச் செலவழிக்காது. எடுத்துக்காட்டு மீண்டும் இயக்கக்கூடிய GET வேலையைப் பற்றியது, தன்னிச்சையாக சமர்ப்பிக்கப்பட்ட பரிவர்த்தனையை மீண்டும் செய்வது பாதுகாப்பானது என்பதற்கான உறுதிமொழி அல்ல.