クローラーは http プロキシを使用します

1. 各プロセスは、インターフェイスから IP リストをランダムに取得し、再利用します。失敗したら、API を呼び出して取得します。

一般的なロジックは次のとおりです。

(1) プロセスごとに、インターフェイスから IP の一部をランダムに取得し、IP ディレクトリを繰り返し試行してデータを取得します。

(2) アクセスに成功した場合は、引き続き次のものを取得します。

(3) 失敗した場合は、インターフェイスから IP のバッチを取得し、試行を続けます。

スキームの欠点: 各 IP には有効期限があります。100個抽出して20個目を使用すると、残りのほとんどが使用できなくなる可能性があります。HTTP リクエストの設定時に接続時間が 3 秒を超え、読み込み時間が 5 秒を超えると、3 ~ 8 秒かかる場合があり、3 ~ 8 秒の間に数百回クロールされる可能性があります。

2. 各プロセスは、使用するインターフェイスから IP をランダムに選択します。失敗した場合は、API を呼び出して IP を取得します。

一般的なロジックは次のとおりです。

(1) プロセスごとに、インターフェイスからランダムに IP を取得し、それを使用してリソースを参照し、

(2) アクセスに成功した場合は、引き続き次のものを取得します。

(3) 失敗した場合は、インターフェイスからランダムに IP を取得し、試行を続けます。

このソリューションの欠点: IP を取得するために API を呼び出す頻度が非常に高いため、プロキシサーバーに大きな負荷がかかり、API インターフェースの安定性に影響を与え、抽出が制限される可能性があります。このソリューションは適切ではなく、長時間安定して実行することはできません。

3. 最初に多数の IP を抽出してローカル データベースにインポートし、データベースから IP を抽出します。

一般的なロジックは次のとおりです。

(1) データベースにテーブルを作成し、インポート スクリプトを記述し、1 分間に必要な API の数 (アドバイスについては、プロキシ IP サービス プロバイダーに相談してください)、IP リストをデータベースにインポートします。

(2) インポート時刻、IP、ポート、有効期限、IP の可用性ステータス、およびその他のフィールドを記録します。

(3) データベースから使用可能な IP を読み取る取得スクリプトを作成し、各プロセスがデータベースから使用する IP を取得します。

クロールの実行、結果の判定、Cookieの処理など 、検証コードがあるか失敗する限り、IPをあきらめて、IPを再度変更します。

#! -*- encoding:utf-8 -*-

    import requests

    # 要访问的目标页面
    targetUrl = "http://ip.hahado.cn/ip"

    # 代理服务器
    proxyHost = "ip.hahado.cn"
    proxyPort = "39010"

    # 代理隧道验证信息
    proxyUser = "username"
    proxyPass = "password"

    proxyMeta = "http://%(user)s:%(pass)s@%(host)s:%(port)s" % {
        "host" : proxyHost,
        "port" : proxyPort,
        "user" : proxyUser,
        "pass" : proxyPass,
    }

    proxies = {
        "http"  : proxyMeta,
        "https" : proxyMeta,
    }

    resp = requests.get(targetUrl, proxies=proxies)

    print resp.status_code
    print resp.text

おすすめ

転載: blog.csdn.net/weixin_73725158/article/details/130501858