තවත් proxy එකක් හරහා Scrapy GET නැවත උත්සාහ කරන්න
නැවත උත්සාහ කිරීමේ අයවැයට ගරු කරමින් නව proxy එකක් සමඟ නව ඉල්ලීමක් නියම කිරීමට 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 ආධාරක වන proxy URL භාවිත කරන්න. අවසර ලත් පොදු GET ඉල්ලීම් නැවත උත්සාහ කිරීමට, HTTP proxy ලැයිස්තුවේ සිට සත්යාපනය නොකළ HTTP අපේක්ෂකයකට proxy_url සැපයිය හැක. කලින් ඈඳා තිබූ proxy-authorization ක්ෂේත්රය ඉවත් කිරීම පැරණි මැදිහත්කරුවෙකුගේ ශීර්ෂය මෙම තේරීමට ගෙන ඒම වළක්වයි; අදාළ විට නව proxy URL එකෙන් නව ගිණුම ව්යුත්පන්න කිරීමට මිඩ්ල්වෙයර්ට ඉඩ දෙන්න.
මෙම callback මට්ටමේ තේරීම RetryMiddleware එහි වින්යාසගත අසාර්ථකතා ස්වයංක්රීයව හැසිරවීමෙන් වෙන් කර තබන්න. නැවත උත්සාහය කුමන ස්ථරයට හිමිද යන්න තීරණය කරන්න, එවිට මෙහෙයුම ස්වාධීන අයවැය දෙකක් වැය නොකරයි. උදාහරණය නැවත ක්රියාත්මක කළ හැකි GET කාර්යය ගැනය, අත්තනෝමතිකව යවන ලද ගනුදෙනුවක් නැවත කිරීම ආරක්ෂිත යැයි පොරොන්දුවක් නොවේ.