Heim  >  Artikel  >  Backend-Entwicklung  >  Implementierungsmethode für den Python-Crawler-Agent-IP-Pool

Implementierungsmethode für den Python-Crawler-Agent-IP-Pool

高洛峰
高洛峰Original
2017-02-11 13:09:462638Durchsuche

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:

Benutzer geplanter Aufgaben prüfen regelmäßig die Agentenverfügbarkeit in der Datenbank und löschen nicht verfügbare Agenten. Gleichzeitig wird auch die Initiative ergriffen, den neuesten Proxy über ProxyGetter abzurufen und ihn in die Datenbank einzufügen.


ProxyApi:

Die externe Schnittstelle des Proxy-Pools Jetzt relativ einfach, ich habe mir Flask zwei Stunden lang angeschaut. Die Entscheidung wurde mit Flask getroffen. Die Funktion besteht darin, Crawlern Get/Delete/Refresh und andere Schnittstellen bereitzustellen, um die direkte Verwendung durch Crawler zu erleichtern.



[HTML_REMOVED] Design

Implementierungsmethode für den Python-Crawler-Agent-IP-Pool3. 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_allZeitplan: 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文件

Abhängigkeiten installieren:

pip install -r requirements.txt

Start:

需要分别启动定时任务和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: Implementierungsmethode für den Python-Crawler-Agent-IP-PoolIndexseite:



Seite abrufen: Implementierungsmethode für den Python-Crawler-Agent-IP-Pool


get_all page: Implementierungsmethode für den Python-Crawler-Agent-IP-Pool


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: Implementierungsmethode für den Python-Crawler-Agent-IP-Pool

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)})
  # ....
6. Schließlich

Die Zeit ist knapp, die Funktionen und der Code sind relativ rudimentär , und ich werde es verbessern, wenn ich in Zukunft Zeit habe. Wenn es dir gefällt, gib ihm einen Stern auf Github. dankbar!

Weitere Artikel zu Implementierungsmethoden für Python-Crawler-Agent-IP-Pools finden Sie auf der chinesischen PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn