scrapy-proxy-pool: hantering van binêre response in ban-opsporing
Beperk die tekspatroontoets van scrapy-proxy-pool tot TextResponse, terwyl besluite oor status en leë liggaam behou word.
'n PDF of prent kan suksesvol deur 'n proxy aankom en dan in die ban-opsporing misluk. Scrapy se basis-Response stel die body-bytes bloot, maar sy text-eienskap lewer die fout “Response content isn't text.”
As die geïnstalleerde scrapy-proxy-pool-beleid response.text onvoorwaardelik deursoek, vervang daardie beleid met 'n tipebewuste weergawe:
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
Kies dit deur die pakket se uitbreidingsinstelling:
PROXY_POOL_BAN_POLICY = "myproject.policy.BinaryAwarePolicy"
Dit behou die beleid se status- en leë-liggaam-reëls en beperk die teksoektog tot response wat dit ondersteun. Die geërfde uitsonderingsbeleid bly ook beskikbaar.
Hersien ook daardie oorblywende reëls vir die toepassing: 'n doelbewus leë 200-response of 'n gewone bestemmingsfout is nie altyd bewys van 'n slegte proxy nie. Hou die middleware aktief en verander die klassifikasie wat die fout veroorsaak het, eerder as om alle ban-opsporing vir binêre aflaaie af te skakel.