En travaillant comme robot d'exploration du Web profond distribué dans l'entreprise, nous avons construit un service de pool de proxy stable pour fournir des proxys efficaces à des milliers de robots d'exploration, garantissant que chaque robot d'exploration obtient une adresse IP proxy valide pour le site Web correspondant, garantissant ainsi que le robot d'exploration Il fonctionne rapidement et de manière stable, je souhaite donc utiliser des ressources gratuites pour créer un service de pool de proxy simple.
En travaillant en tant que robot d'exploration du Web profond distribué dans l'entreprise, nous avons construit un service de pool de proxy stable pour fournir des proxys efficaces à des milliers de robots d'exploration, garantissant que chaque robot d'exploration obtient une adresse IP proxy valide pour le site Web correspondant. garantissant ainsi le fonctionnement rapide et stable du robot. Bien entendu, les activités réalisées dans l'entreprise ne peuvent pas être open source. Cependant, je ressens des démangeaisons pendant mon temps libre, je souhaite donc utiliser des ressources gratuites pour créer un service de pool de proxy simple.
1. Question
D'où vient l'IP du proxy ?
Quand j'ai appris l'exploration par moi-même, je n'avais pas d'adresse IP de proxy, je suis donc allé sur des sites Web avec des proxys gratuits tels que Xisha et Quick Proxy pour explorer. Il existe encore des proxys qui peuvent être utilisés. Bien entendu, si vous disposez d’une meilleure interface proxy, vous pouvez également la connecter vous-même. La collecte des proxys gratuits est également très simple, rien de plus que : visiter la page page —> extraction régulière/xpath —> sauvegarder
Comment s'assurer de la qualité du proxy ?
Il est certain que la plupart des IP proxy gratuites ne peuvent pas être utilisées, sinon pourquoi d'autres fourniraient-elles des IP payantes (mais le fait est que les IP payantes de nombreux agents ne sont pas stables et beaucoup d'entre elles ne peuvent pas être utilisées). Par conséquent, l'adresse IP du proxy collectée ne peut pas être utilisée directement. Vous pouvez écrire un programme de détection pour utiliser en permanence ces proxys pour accéder à un site Web stable afin de voir s'il peut être utilisé normalement. Ce processus peut être multithread ou asynchrone, car la détection des proxys est un processus lent.
Comment stocker les proxys collectés ?
Ici, je dois recommander une base de données NoSQL SSDB hautes performances qui prend en charge plusieurs structures de données pour le proxy Redis. Prend en charge les données de file d'attente, de hachage, d'ensemble, de paires k-v et de niveau T. C'est un très bon outil de stockage intermédiaire pour les robots distribués.
Comment faciliter l'utilisation de ces proxys par les robots d'exploration ?
La réponse est définitivement d'en faire un service. Python a tellement de frameworks Web. Il suffit d'en choisir un et d'écrire une API que le robot d'exploration pourra appeler. Cela présente de nombreux avantages. Par exemple, lorsque le robot d'exploration constate que l'agent ne peut pas être utilisé, il peut supprimer activement l'adresse IP de l'agent via l'API. Lorsque le robot d'exploration constate que l'adresse IP du pool d'agents n'est pas suffisante, il peut actualiser activement le pool d'agents. . C'est plus fiable que le programme de détection.
2. Conception du pool de proxy
Le pool de proxy se compose de quatre parties :
ProxyGetter :
Interface d'acquisition de proxy, il y en a actuellement 5. les sources proxy gratuites, à chaque appel, les derniers proxys de ces 5 sites Web seront capturés et mis dans la base de données. Vous pouvez ajouter des interfaces d'acquisition de proxy supplémentaires par vous-même
DB :
est utilisé pour. stocker les adresses IP proxy. Il n’est disponible que pour le moment. Quant à la raison pour laquelle vous choisissez SSDB, vous pouvez vous référer à cet article. Personnellement, je pense que SSDB est une bonne alternative à Redis. Si vous n'avez pas utilisé SSDB, vous pouvez vous y référer ici ; Planification :
ProxyApi :
[HTML_REMOVED] Conception
3. Module CodeStructure de données de haut niveau en Python, dynamique. Les types et la liaison dynamique le rendent très approprié pour le développement rapide d'applications, et convient également comme langage de liaison pour connecter des composants logiciels existants. Il est également très simple d'utiliser Python pour créer ce pool d'IP proxy. Le code est divisé en 6 modules :
Api : code lié à l'interface api L'api est actuellement implémentée par Flask, et le code est également très simple. simple. La demande du client est transmise à Flask et Flask appelle l'implémentation dans ProxyManager, y compris
DB : code lié à la base de données. Le code est implémenté en mode usine pour faciliter l'expansion d'autres types de bases de données à l'avenir ; get/delete/refresh/get_all
et d'autres classes d'implémentation spécifiques d'interfaces Actuellement, le pool de proxy est uniquement responsable de la gestion du proxy. . Il pourrait y avoir plus de fonctions à l'avenir, telles que le proxy et la liaison des robots, la liaison des agents et des comptes, etc.
ProxyGetter : codes pertinents obtenus par les agents. Actuellement, cinq sites Web, dont un agent rapide, un agent. 66, votre agent, l'agent Xixi et guobanjia sont capturés. Proxy gratuits. Après tests, ces cinq sites Web n'ont que soixante ou soixante-dix proxys disponibles qui sont mis à jour quotidiennement. Bien sûr, ils prennent également en charge leur propre extension de l'interface proxy ; get/delete/refresh/get_all
Planification : le code lié aux tâches planifiées implémente désormais uniquement le code d'actualisation planifiée et vérifie les agents disponibles, en utilisant la méthode multi-processus ;
Util : stocke certaines méthodes ou fonctions publiques du module, notamment GetConfig
: une classe qui lit le fichier de configuration config.ini, ConfigParse
: une classe de réécriture intégrée de ConfigParser
pour le rendre sensible à la casse, Singleton
: implémente singleton, LazyProperty
: implémente le calcul paresseux des attributs de classe. Etc.;
Autres fichiers : Fichier de configuration : Config.ini, configuration de la base de données et configuration de l'interface d'acquisition de proxy. Vous pouvez ajouter une nouvelle méthode d'acquisition de proxy dans GetFreeProxy et l'enregistrer dans Config.ini pour l'utiliser ;
4. Installation
Code de téléchargement :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
Utiliser
Une fois la tâche planifiée démarrée, tous les agents seront récupérés dans la base de données via la méthode d'acquisition d'agent et vérifiés. Par la suite, elle sera répétée toutes les 20 minutes par défaut. Environ une minute ou deux après le démarrage de la tâche planifiée, vous pouvez voir les proxys disponibles actualisés dans SSDB : Vous pouvez l'utiliser dans le navigateur après avoir démarré ProxyApi.py. l'interface récupère le proxy, voici la capture d'écran dans le navigateur :page d'index :
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)}) # ....