Паўтарыць GET у Scrapy праз іншы проксі
Выкарыстайце дапаможнік паўтору 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
Гэта дапаможнік павука. Той, хто выклікае, павінен вярнуць або аддаць атрыманы Request, калі ён ёсць. None азначае, што дапаможнік адмовіўся ад чарговага паўтору ў межах дзейнага ліміту.
Дапаможнік паўтору капіруе запыт, абнаўляе лік паўтораў і забяспечвае паводзіны планавальніка, прыдатныя для паўтору. Калі проста аддаць той жа URL як звычайны новы запыт, можна натрапіць на фільтрацыю дублікатаў.
Выкарыстайце URL проксі, які падтрымлівае ўключаны HttpProxyMiddleware. Для паўтору дазволеных публічных GET-запытаў неаўтэнтыфікаваны HTTP-кандыдат з спісу HTTP-проксі можа даць proxy_url. Ачыстка раней далучанага поля proxy-authorization не дазваляе перанесці загаловак старога пасярэдніка ў гэты выбар; дайце прамежкаваму ПЗ вывесці новы ўліковы запіс з новага URL проксі, калі гэта датычыцца.
Трымайце гэты выбар на ўзроўні callback асобна ад аўтаматычнай апрацоўкі наладжаных збояў RetryMiddleware. Вызначце, які слой валодае паўторам, каб аперацыя не спажывала два незалежныя бюджэты. Прыклад тычыцца працы GET, якую можна прайграць, а не абяцання, што паўтарэнне адвольнай адпраўленай транзакцыі бяспечнае.