scrapy-proxy-pool: จัดการการตอบสนองแบบไบนารีในการตรวจจับการแบน
จำกัดการตรวจสอบรูปแบบข้อความของ scrapy-proxy-pool ไว้ที่ TextResponse โดยยังคงการตัดสินใจเรื่องสถานะและเนื้อหาว่าง
ไฟล์ PDF หรือรูปภาพอาจมาถึงผ่านพร็อกซี่ได้สำเร็จแล้วล้มเหลวในการตรวจจับการแบน Response พื้นฐานของ Scrapy เปิดเผยไบต์ของเนื้อหา แต่คุณสมบัติ text ของมันทำให้เกิดข้อผิดพลาด “Response content isn't text.”
หากนโยบาย scrapy-proxy-pool ที่ติดตั้งไว้ค้นหา response.text โดยไม่มีเงื่อนไข ให้แทนที่ด้วยเวอร์ชันที่ตระหนักถึงชนิด:
from scrapy.http import TextResponse
from scrapy_proxy_pool.policy import BanDetectionPolicy
class BinaryAwarePolicy(BanDetectionPolicy):
def response_is_ban(self, request, response):
if isinstance(response, TextResponse):
if self.BANNED_PATTERN.search(response.text):
return True
if response.status not in self.NOT_BAN_STATUSES:
return True
return response.status == 200 and not response.body
เลือกผ่านการตั้งค่าส่วนขยายของแพ็กเกจ:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
วิธีนี้ยังคงกฎเรื่องสถานะและเนื้อหาว่างของนโยบายไว้ และจำกัดการค้นหาข้อความไว้เฉพาะการตอบสนองที่รองรับเท่านั้น นโยบายข้อยกเว้นที่สืบทอดมายังคงใช้งานได้
ตรวจสอบกฎที่เหลือเหล่านั้นสำหรับแอปพลิเคชันด้วย: การตอบสนอง 200 ที่ว่างเปล่าโดยเจตนาหรือข้อผิดพลาดปลายทางทั่วไปไม่ใช่หลักฐานของพร็อกซี่แย่เสมอไป ปล่อยให้มิดเดิลแวร์ทำงานอยู่และเปลี่ยนการจำแนกประเภทที่ทำให้เกิดความล้มเหลว แทนที่จะปิดการตรวจจับการแบนทั้งหมดสำหรับการดาวน์โหลดไบนารี