Middleware de proxy în Scrapy: valorile returnate Request și None
Returnați controlul după ce atribuiți un proxy Scrapy, în loc să reprogramați din neatenție aceeași cerere înainte de a o descărca.
Adresa proxy se schimbă în jurnal. Destinația nu apare niciodată în jurnalul de acces al proxy-ului. Verificați dacă middleware-ul dumneavoastră lasă cererea să ajungă la descărcător.
În middleware-ul descărcătorului din Scrapy, returnarea unui Request înseamnă reprogramarea acelei cereri. Nu înseamnă „continuați să trimiteți acest obiect cu metadatele pe care tocmai le-am modificat”.
Pentru un selector care alege doar o rută, forma importantă este:
def process_request(self, request):
request.meta['proxy'] = self.choose_proxy()
return None
Acest fragment arată forma actuală a cârligului; folosiți interfața de middleware acceptată de versiunea Scrapy instalată. Selectorul trebuie să returneze un punct final valid și să gestioneze explicit un bazin indisponibil. Un crawl public care permite intermediari publici poate lua candidați HTTP din lista de proxy-uri HTTP pentru acea valoare returnată.
Returnarea None lasă restul middleware-ului de cereri și descărcătorul să continue. Returnarea altui Request este utilă când înlocuiți sau reîncercați intenționat o lucrare, dar are nevoie de un motiv și de o condiție de ieșire.
Un rotator care returnează aceeași cerere de fiecare dată poate rula în mod repetat propriul cod de selecție fără a stabili vreodată o conexiune la destinație. Creșterea timeout-urilor sau deschiderea mai multor porturi proxy nu poate repara acea buclă de flux de control.
Examinați intrarea în middleware, comportamentul la returnare și prima încercare reală de rețea ca evenimente separate. O linie de jurnal care spune „proxy selectat” dovedește doar că selectorul a rulat. Nu dovedește că a fost trimisă o cerere cu punctul final selectat.