Pythonによるプロキシプール(Proxy Pool)システムの実現

2827 ワード

プロジェクトのコードはここにあります.https://github.com/WiseDoge/ProxyPool
言語にまたがる高性能IPエージェントプール、Python実現.
注意:プログラムを実行する前に、スナップエージェントの関数を更新してください.
実行環境
  • Python 3.5(Pythonのバージョンが3.5以上であることを必ず保証してください.そうしないと、非同期検査では使用できません.)
  • Redis Redis公式サイトはWindowsのインストール版を提供していません.Windowsユーザーはここをクリックして、自分でコンパイルしたバイナリバージョン(3.2バージョン2.7 MB、VS 2015コンパイル)をダウンロードすることができます.

  • インストール
    ①直接使用
    インストール依存$ pip install -r requirements.txt
    Windowsユーザーがlxmlライブラリをインストールできない場合は、ここをクリックしてください.
    プロキシプールとAPIを開く$ cd proxypool $ python3 run.py
    ②取付使用
    インストール$ cd proxypool $ python setup.py install
    プロキシプールとAPIを開く$ proxypool_run
    ③バイナリパッケージの使用
    Windowsユーザーはここをクリックしてこのプログラムのバイナリパッケージを取得し、直接実行することができます.
    APIを使用したプロキシの取得http://127.0.0.1:5000/にアクセスしてホームページにアクセスし、「Welcome」が表示された場合、正常に起動したことを証明します.http://127.0.0.1:5000/getにアクセスすると、利用可能なエージェントを取得できます.http://127.0.0.1:5000/countにアクセスすると、エージェントプールで使用可能なエージェントの数を取得できます.
    次のような適切な言語でプログラムコードを取得することもできます.
    import requests
    from bs4 import BeautifulSoup
    import lxml
    
    def get_proxy():
        r = requests.get('http://127.0.0.1:5000/get')
        proxy = BeautifulSoup(r.text, "lxml").get_text()
        return proxy

    各モジュール機能
  • proxyGetter.py
    爬虫モジュール
  • class proxypool.proxyGetter.FreeProxyGetter

  • 爬虫類は、エージェントソースのWebサイトのエージェントをキャプチャするために使用され、ユーザーはキャプチャルールを複写し、補充することができます.
  • schdule.py
    スケジューラモジュール
  • class proxypool.schdule.VaildityTester

  • 非同期検出クラスは、指定されたエージェントの可用性を非同期で検出できます.
  • class proxypool.schdule.PoolAdder

  • エージェント追加器は、爬虫モジュールをトリガーし、エージェントプール内のエージェントを補充し、エージェントプールのエージェント数がしきい値に達したときに停止します.
  • class proxypool.schdule.Schedule

  • エージェントプールはクラスを起動し、RUN関数を実行すると、エージェントプールの内容の追加と更新を担当する2つのプロセスが作成されます.
  • db.py
    Redisデータベース接続モジュール
  • class proxypool.db.RedisClient

  • データベース操作クラスは、Redisとの接続を維持し、データベースの削除を確認します.
  • error.py
    例外モジュール
  • class proxypool.error.ResourceDepletionError

  • リソースの枯渇が異常で、すべてのキャプチャサイトから使用可能なエージェントリソースがつかめない場合は、
    この例外を放出します.
  • class proxypool.error.PoolEmptyError

  • エージェントプールが空です.エージェントプールが長時間空の場合、この例外が放出されます.
  • api.py
    APIモジュールは、Webサーバを起動し、エージェントの取得機能を外部に提供します.
  • utils.py
    ツールボックス
  • setting.py
    設定