ລອງ GET ຂອງ Scrapy ຄືນໃໝ່ຜ່ານ proxy ອື່ນ
ໃຊ້ຕົວຊ່ວຍລອງຄືນໃໝ່ຂອງ Scrapy ເພື່ອກຳນົດເວລາຄຳຮ້ອງໃໝ່ດ້ວຍ proxy ໃໝ່ ໂດຍເຄົາລົບງົບປະມານການລອງຄືນໃໝ່.
ການປ່ຽນ response.request.meta ປ່ຽນວັດຖຸ Python. ເພື່ອດາວໂຫຼດອີກ ຕ້ອງໃຫ້ Request ອື່ນແກ່ Scrapy ເພື່ອກຳນົດເວລາ.
ສຳລັບ 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
ນີ້ແມ່ນຕົວຊ່ວຍ spider. ຜູ້ເອີ້ນຕ້ອງສົ່ງຄືນ ຫຼື yield Request ທີ່ໄດ້ມາເມື່ອມີ. None ໝາຍຄວາມວ່າຕົວຊ່ວຍໄດ້ປະຕິເສດການລອງຄືນໃໝ່ອີກພາຍໃນຂີດຈຳກັດທີ່ໃຊ້.
ຕົວຊ່ວຍລອງຄືນໃໝ່ຄັດລອກຄຳຮ້ອງ, ອັບເດດຈຳນວນການລອງຄືນໃໝ່ ແລະ ໃຫ້ພຶດຕິກຳຂອງຕົວກຳນົດເວລາທີ່ເໝາະສຳລັບການລອງຄືນໃໝ່. ການ yield URL ດຽວກັນເປັນຄຳຮ້ອງໃໝ່ທຳມະດາ ອາດຈະພົບການກັ່ນຕອງຂໍ້ມູນຊ້ຳແທນ.
ໃຊ້ URL proxy ທີ່ HttpProxyMiddleware ທີ່ເປີດໃຊ້ຮອງຮັບ. ສຳລັບການລອງຄືນໃໝ່ຂອງຄຳຮ້ອງ GET ສາທາລະນະທີ່ອະນຸຍາດ, ຜູ້ສະໝັກ HTTP ທີ່ບໍ່ມີການພິສູດຕົວຕົນຈາກ ລາຍຊື່ proxy HTTP ສາມາດໃຫ້ proxy_url. ການລຶບຊ່ອງ proxy-authorization ທີ່ເຄີຍຕິດຕັ້ງໄວ້ກ່ອນ ປ້ອງກັນການນຳຫົວຂໍ້ຂອງຕົວກາງເກົ່າເຂົ້າມາໃນການເລືອກນີ້; ໃຫ້ middleware ດຶງບັນຊີໃໝ່ຈາກ URL proxy ໃໝ່ເມື່ອເໝາະສົມ.
ແຍກການເລືອກລະດັບ callback ນີ້ອອກຈາກການຈັດການອັດຕະໂນມັດຂອງ RetryMiddleware ສຳລັບຄວາມລົ້ມເຫຼວທີ່ຕັ້ງຄ່າໄວ້. ຕັດສິນວ່າຊັ້ນໃດເປັນເຈົ້າຂອງການລອງຄືນໃໝ່ ເພື່ອບໍ່ໃຫ້ການດຳເນີນການໃຊ້ງົບສອງອັນທີ່ເປັນເອກະລາດ. ຕົວຢ່າງແມ່ນກ່ຽວກັບວຽກ GET ທີ່ຫຼິ້ນຄືນໄດ້ ບໍ່ແມ່ນຄຳສັນຍາວ່າການເຮັດທຸລະກຳທີ່ສົ່ງແລ້ວຊ້ຳຈະປອດໄພ.