Ich habe vor kurzem gelernt, wie man einen Pool von Proxy-IPs in meinem Web-Crawler dynamisch einrichtet, und langsam habe ich das Gefühl, dass mir das echte Kopfschmerzen bereitet. Aber durch ständiges Tüfteln und Lernen bin ich endlich weitergekommen, also möchte ich es jetzt mit Ihnen teilen.
scraipipgo dynamisch eingestellter IP-Proxy
Es ist nicht wirklich eine einfache Aufgabe, dynamische IP-Proxy-Einstellungen in Scraipipgo zu implementieren. Aber nach meinen unermüdlichen Bemühungen habe ich schließlich einige Methoden gefunden, die mir helfen können, dieses Ziel zu erreichen. Zuerst muss ich einige IP-Proxys vorbereiten, ich kann einige hochwertige Proxy-IPs kaufen oder einige kostenlose Proxy-IPs verwenden, aber seien Sie sich bewusst, dass kostenlose Proxy-IPs weniger stabil sein können, Sie müssen sie selbst überprüfen und verifizieren. Als Nächstes muss ich eine Middleware verwenden, um Proxy-IPs dynamisch zu setzen, z. B. mit der scraipipgo-rotating-proxies-Middleware, um IP-Pools dynamisch zu wechseln. Natürlich müssen auch die Einstellungen von Scraipipgo konfiguriert werden, wie z. B. die Einstellung der Download-Middleware und des verwendeten Proxy-IP-Pools.
Nachfolgend finden Sie ein einfaches Codebeispiel, das zeigt, wie man einen IP-Proxy in Scraipipgo dynamisch einrichtet:
"ipipgothon
scraipipgo importieren
from scraipipgo.downloadermiddlewares.httpproxy import HttpProxyMiddleware
zufällig importieren
class MyProxyMiddleware(HttpProxyMiddleware).
def process_request(self, request, spider).
# Zufällige Auswahl eines Agenten aus dem Agentenpool
proxy = random.choice(self.proxies)
if proxy.get('user_pass') is not None: if proxy.get('user_pass') is not None.
request.meta['proxy'] = "http://%s" % proxy['ip_port']
encoded_user_pass = base64.encodestring(proxy['user_pass'])
request.headers['Proxy-Authorization'] = 'Basic ' + encoded_user_pass
sonst.
request.meta['proxy'] = "http://%s" % proxy['ip_port']
def process_response(self, request, response, spider).
if response.status ! = 200:
# Proxy für Antworten mit einem anderen Statuscode als 200 umschalten
proxy = random.choice(self.proxies)
request.meta['proxy'] = "http://%s" % proxy['ip_port']
return self._retry(request, Exception('http status code ' % response.status), spider) oder response
Antwort zurückgeben
“`
Der obige Code ist eine benutzerdefinierte Proxy-Middleware, die die process_request-Methode verwendet, um eine Proxy-IP nach dem Zufallsprinzip auszuwählen und gleichzeitig die Proxys zu wechseln, um zu versuchen, die Anfrage erneut zu senden, wenn die Antwort einen anderen Statuscode als 200 hat.
scraipipgo richtet Proxy-IP-Pools ein
Die Einrichtung eines Proxy-IP-Pools in Scraipipgo ist keine leichte Aufgabe, aber sie kann mit einigen unermüdlichen Anstrengungen erreicht werden. Zunächst muss ich eine große Anzahl von Proxy-IPs vorbereiten, die über einige Proxy-IP-Anbieter erworben werden können, oder ich kann einige kostenlose Proxy-IPs verwenden, aber ich muss mir bewusst sein, dass kostenlose Proxy-IPs möglicherweise nicht stabil genug sind, und ich muss sie selbst überprüfen und verifizieren. Als Nächstes muss ich eine Middleware verwenden, um den Wechsel der Proxy-IPs zu erreichen, z. B. die Middleware scraipipgo-rotating-proxies, um einen dynamischen Wechsel der IP-Pools zu erreichen. Natürlich müssen auch die Einstellungen von Scraipipgo konfiguriert werden, wie z. B. die Einstellung der Download-Middleware und des verwendeten Proxy-IP-Pools.
In diesem Prozess ist es unvermeidlich, dass man auf eine Vielzahl von Problemen stößt, aber solange man Geduld und unermüdliche Anstrengungen aufbringt, wird man schließlich in der Lage sein, die Schwierigkeiten zu überwinden und seine Ziele zu erreichen. Ich hoffe, dass ich mit meinem Beitrag Menschen in Not helfen kann, und ich hoffe auch, dass ich in diesem Prozess weiter wachsen und Fortschritte machen kann. Prost!