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 талаасын тазалоо эски ортомчунун аталышын бул тандоого өткөрбөйт; тиешелүү болгондо middlewareге жаңы аккаунтту жаңы прокси URLден алып чыгууга жол бериңиз.
Бул callback деңгээлиндеги тандоону RetryMiddlewareдин конфигурацияланган ийгиликсиздиктерин автоматтык иштетүүсүнөн өзүнчө кармаңыз. Кайталоо кайсы катмарга таандык экенин чечиңиз, ошондо операция эки көз карандысыз бюджетти сарптабайт. Мисал кайра ойнотула турган GET иши жөнүндө, каалаган жиберилген транзакцияны кайталоо коопсуз деген убада эмес.