ลอง GET ของ Scrapy อีกครั้งผ่านพร็อกซีอื่น
ใช้ตัวช่วยลองใหม่ของ Scrapy เพื่อจัดตารางคำขอใหม่ด้วยพร็อกซีใหม่โดยเคารพงบประมาณการลองใหม่
การเปลี่ยน 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 พร็อกซีที่ HttpProxyMiddleware ที่เปิดใช้งานรองรับ สำหรับการลองใหม่ของคำขอ GET สาธารณะที่ได้รับอนุญาต ผู้สมัคร HTTP ที่ไม่มีการพิสูจน์ตัวตนจากรายการพร็อกซี HTTPสามารถให้ proxy_url ได้ การล้างฟิลด์ proxy-authorization ที่แนบไว้ก่อนหน้าจะป้องกันไม่ให้ส่วนหัวของตัวกลางเก่าติดเข้ามาในการเลือกนี้ ปล่อยให้มิดเดิลแวร์ดึงบัญชีใหม่จาก URL พร็อกซีใหม่เมื่อเกี่ยวข้อง
แยกการเลือกในระดับ callback นี้ออกจากการจัดการอัตโนมัติของ RetryMiddleware สำหรับความล้มเหลวที่กำหนดค่าไว้ ตัดสินว่าชั้นใดเป็นเจ้าของการลองใหม่เพื่อให้การดำเนินการไม่ใช้สองงบประมาณที่เป็นอิสระ ตัวอย่างเกี่ยวกับงาน GET ที่เล่นซ้ำได้ ไม่ใช่คำสัญญาว่าการทำธุรกรรมที่ส่งโดยพลการซ้ำจะปลอดภัย