scrapy-proxy-pool: bináris válaszok kezelése a tiltásfelismerésben
Szűkítse a scrapy-proxy-pool szövegminta-ellenőrzését TextResponse-ra, miközben megtartja a státusz- és üres törzsre vonatkozó döntéseket.
Egy PDF vagy kép sikeresen megérkezhet egy proxyn keresztül, majd elbukhat a tiltásfelismerésben. A Scrapy alap Response osztálya feltárja a törzs bájtjait, de a text tulajdonsága „Response content isn't text.” hibát dob.
Ha a telepített scrapy-proxy-pool szabály feltétel nélkül keresi a response.text tartalmát, cserélje le azt egy típustudatos változatra:
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
Válassza ki a csomag bővítménybeállításán keresztül:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Ez megtartja a szabály státusz- és üres törzsre vonatkozó rendelkezéseit, a szöveges keresést pedig az azt támogató válaszokra korlátozza. Az örökölt kivételszabály továbbra is elérhető.
Tekintse át ezeket a fennmaradó szabályokat az alkalmazás szempontjából is: egy szándékosan üres 200-as válasz vagy egy szokásos célhiba nem mindig bizonyít rossz proxyt. Tartsa aktívan a middleware-t, és módosítsa a hibát okozó besorolást, ahelyett hogy kikapcsolná a teljes tiltásfelismerést a bináris letöltéseknél.