Als verteilter Deep-Web-Crawler im Unternehmen haben wir einen stabilen Proxy-Pool-Dienst aufgebaut, um Tausenden von Crawlern effektive Proxys bereitzustellen und sicherzustellen, dass jeder Crawler eine gültige Proxy-IP für die entsprechende Website erhält, wodurch sichergestellt wird, dass der Crawler Es läuft schnell und stabil, daher möchte ich einige kostenlose Ressourcen nutzen, um einen einfachen Proxy-Pool-Dienst aufzubauen.
Als verteilter Deep-Web-Crawler im Unternehmen haben wir einen stabilen Proxy-Pool-Dienst aufgebaut, um effektive Proxys für Tausende von Crawlern bereitzustellen und sicherzustellen, dass jeder Crawler eine gültige Proxy-IP für die entsprechende Website erhält. Dadurch wird der schnelle und stabile Betrieb des Crawlers sichergestellt. Natürlich können die im Unternehmen erledigten Dinge nicht als Open Source bereitgestellt werden. In meiner Freizeit juckt es mich jedoch, deshalb möchte ich einige kostenlose Ressourcen nutzen, um einen einfachen Proxy-Pool-Dienst aufzubauen.
1. Frage
Woher kommt die Proxy-IP?
Als ich das Crawlen zum ersten Mal selbst lernte, hatte ich keine Proxy-IP, also ging ich zum Crawlen zu Websites mit kostenlosen Proxys wie Xisha und Quick Proxy. Es gibt immer noch einige Proxys, die verwendet werden können. Wenn Sie über eine bessere Proxy-Schnittstelle verfügen, können Sie diese natürlich auch selbst anschließen. Das Sammeln kostenloser Proxys ist ebenfalls sehr einfach, nichts weiter als: Besuchen Sie die Seite Seite —> reguläre/XPath-Extraktion —> Speichern
Wie stellt man die Qualität des Proxys sicher?
Es ist sicher, dass die meisten kostenlosen Proxy-IPs nicht verwendet werden können. Warum sollten andere sonst kostenpflichtige IPs bereitstellen (Tatsache ist jedoch, dass die kostenpflichtigen IPs vieler Agenten nicht stabil sind und viele von ihnen nicht verwendet werden können). Daher kann die gesammelte Proxy-IP nicht direkt verwendet werden. Sie können ein Erkennungsprogramm schreiben, um diese Proxys kontinuierlich zu verwenden, um auf eine stabile Website zuzugreifen und festzustellen, ob sie normal verwendet werden kann. Dieser Prozess kann multithreaded oder asynchron sein, da die Erkennung von Proxys ein langsamer Prozess ist.
Wie speichere ich die gesammelten Proxys?
Hier muss ich eine leistungsstarke NoSQL-Datenbank SSDB empfehlen, die mehrere Datenstrukturen für das Proxying von Redis unterstützt. Unterstützt Warteschlangen-, Hash-, Set-, K-V-Paare und T-Level-Daten. Es ist ein sehr gutes Zwischenspeichertool für verteilte Crawler.
Wie kann man Crawlern die Verwendung dieser Proxys erleichtern?
Die Antwort besteht definitiv darin, daraus einen Dienst zu machen. Wählen Sie einfach eines aus und schreiben Sie eine API, die der Crawler aufruft. Dies hat viele Vorteile. Wenn der Crawler beispielsweise feststellt, dass der Agent nicht verwendet werden kann, kann er die Agenten-IP aktiv über die API löschen . Dies ist zuverlässiger als das Erkennungsprogramm.
2. Proxy-Pool-Design
Der Proxy-Pool besteht aus vier Teilen:
ProxyGetter:
Proxy-Erfassungsschnittstelle, derzeit gibt es 5 Kostenlose Proxy-Quelle, bei jedem Aufruf werden die neuesten Proxys dieser 5 Websites erfasst und in die Datenbank eingefügt. Sie können selbst zusätzliche Proxy-Erfassungsschnittstellen hinzufügen Zum Speichern von Proxy-IPs wird derzeit nur SSDB unterstützt. Warum Sie sich für SSDB entscheiden, erfahren Sie in diesem Artikel. Ich persönlich denke, dass SSDB eine gute Redis-Alternative ist. Die Installation ist sehr einfach Zeitplan:
ProxyApi:
[HTML_REMOVED] Design
3. Codemodul
High-Level-Datenstruktur in Python, dynamisch Durch Typen und dynamische Bindung eignet es sich sehr gut für die schnelle Anwendungsentwicklung und eignet sich auch als Klebesprache zum Verbinden vorhandener Softwarekomponenten. Es ist auch sehr einfach, diesen Proxy-IP-Pool mit Python zu erstellen. Der Code ist in 6 Module unterteilt:API: API-bezogener Code. Die API wird derzeit von Flask implementiert, und der Code ist ebenfalls sehr einfach einfach. Die Clientanforderung wird an Flask übergeben und Flask ruft die Implementierung im ProxyManager auf, einschließlich
DB: Datenbankbezogener Code. Der Code wird im Factory-Modus implementiert, um die Erweiterung anderer Datenbanktypen in Zukunft zu erleichtern. Manager: Derzeit ist der Proxy-Pool nur für die Verwaltung des Proxys verantwortlich . Möglicherweise gibt es in Zukunft weitere Funktionen, wie z. B. Proxy und Bindung von Agenten und Konten usw.; Derzeit werden von Agenten fünf relevante Codes abgerufen 66, Sie-Agent, Xixi-Agent und Guobanjia sind nach dem Testen nur sechzig oder siebzig verfügbare Proxys, die natürlich auch ihre eigene Erweiterung der Proxy-Schnittstelle unterstützen get/delete/refresh/get_all
Zeitplan: Geplanter aufgabenbezogener Code, implementiert jetzt nur geplanten Aktualisierungscode und überprüft die verfügbaren Agenten mithilfe der Multiprozessmethode
Util: Speichert einige öffentliche Modulmethoden oder -funktionen, einschließlich GetConfig
: eine Klasse, die die Konfigurationsdatei config.ini liest, ConfigParse
: eine integrierte Rewrite-Klasse von ConfigParser
, um die Groß-/Kleinschreibung zu berücksichtigen, Singleton
: implementiert Singleton, LazyProperty
: implementiert die verzögerte Berechnung von Klassenattributen. Usw.;
Andere Dateien: Konfigurationsdatei: Config.ini, Datenbankkonfiguration und Proxy-Erfassungsschnittstellenkonfiguration Sie können eine neue Proxy-Erfassungsmethode in GetFreeProxy hinzufügen und in Config.ini registrieren;
4. Installation
Code herunterladen:git clone git@github.com:jhao104/proxy_pool.git 或者直接到https://github.com/jhao104/proxy_pool 下载zip文件
pip install -r requirements.txt
需要分别启动定时任务和api 到Config.ini中配置你的SSDB 到Schedule目录下: >>>python ProxyRefreshSchedule.py 到Api目录下: >>>python ProxyApi.py
5 >Nachdem die geplante Aufgabe gestartet wurde, werden alle Agenten über die Agentenerfassungsmethode in die Datenbank geholt und überprüft. Danach wird es standardmäßig alle 20 Minuten wiederholt. Ungefähr ein oder zwei Minuten nach dem Start der geplanten Aufgabe können Sie die aktualisierten verfügbaren Proxys in SSDB sehen:
Sie können es im Browser verwenden, nachdem Sie ProxyApi.py gestartet haben Schnittstelle erhält den Proxy, hier ist der Screenshot im Browser: Indexseite:
Seite abrufen:
get_all page:
Wird in Crawlern verwendet. Wenn Sie es im Crawler-Code verwenden möchten, können Sie diese API in eine kapseln Funktion und verwenden Sie sie direkt, zum Beispiel:
import requests def get_proxy(): return requests.get("http://127.0.0.1:5000/get/").content def delete_proxy(proxy): requests.get("http://127.0.0.1:5000/delete/?proxy={}".format(proxy)) # your spider code def spider(): # .... requests.get('https://www.example.com', proxies={"http": "http://{}".format(get_proxy)}) # ....