scrapy-proxy-pool: երկուական պատասխանների մշակումը արգելափակման հայտնաբերման մեջ
Սահմանափակեք scrapy-proxy-pool-ի տեքստային օրինաչափության ստուգումը TextResponse-ով՝ պահպանելով կարգավիճակի և դատարկ մարմնի որոշումները։
PDF-ը կամ պատկերը կարող է հաջողությամբ անցնել պրոքսիով, ապա ձախողվել արգելափակման հայտնաբերման մեջ։ Scrapy-ի հիմնական Response-ը ցուցադրում է մարմնի բայթերը, սակայն նրա 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 պատասխանը կամ սովորական նպատակակետի սխալը միշտ չէ, որ վկայում են վատ պրոքսիի մասին։ Թողեք միջնորդ ծրագիրը ակտիվ և փոխեք այն դասակարգումը, որն առաջացրել է ձախողումը, փոխարենը՝ անջատելու ողջ արգելափակման հայտնաբերումը երկուական ներբեռնումների համար։