ホームページ  >  記事  >  バックエンド開発  >  PHPを使用してクローラ対策機能を備えたクローラプログラムを実装する方法

PHPを使用してクローラ対策機能を備えたクローラプログラムを実装する方法

WBOY
WBOYオリジナル
2023-06-14 10:13:521567ブラウズ

インターネット技術の発展に伴い、クローラー プログラムの適用はますます広まっています。データ分析やマイニングのためのクローラー プログラムを通じて、インターネット上のデータを自動的に取得できます。クローラーの数が増加するにつれて、一部の Web サイトではデータを保護するために抗クローラー テクノロジーを使用し始めています。したがって、PHP を使用してクローラー プログラムを実装するプロセスでは、アンチクローラー テクノロジの課題に対処する方法も考慮する必要があります。

この記事では、PHP を使用してクローラ対策機能を備えたクローラ プログラムを実装する方法を紹介します。

  1. クロールする Web サイトを決定する

まず、クロールする Web サイトを決定する必要があります。一部の小規模な Web サイトの場合は、Web ページを直接クロールしてデータを抽出できます。しかし、一部の大規模な Web サイトでは、クローリングを阻止するためにアンチクローラー技術が使用されることがよくあります。

したがって、クロールする Web サイトを決定するときは、まずその Web サイトがクロール防止テクノロジーを使用しているかどうかを理解する必要があります。使用する場合には、クローラ対策技術の種類と具体的な実装方法を理解し、それに応じた対策を講じる必要があります。

  1. プロキシ IP を使用する

プロキシ IP (プロキシ サーバーの IP アドレス)。プロキシ IP を使用すると、実際の IP アドレスを効果的に隠し、Web サイトが当社のクローラ プログラムについて学習するのを防ぐことができます。 PHP を使用してクローラー プログラムを実装する場合、curl ライブラリを使用して Web ページをリクエストし、リクエスト時にプロキシ IP を挿入できます。

コード例:

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.example.com/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_PROXY, 'proxy_ip:proxy_port');
$result = curl_exec($curl);
curl_close($curl);

上記のコードでは、curl ライブラリを使用して Web サイト「http://www.example.com/」をリクエストし、IP をリクエストするときにプロキシを挿入します。このようにして、Web サイトのデータを正常にリクエストして取得できます。

  1. ランダムな UA

UA、つまりユーザー エージェントを使用します。ブラウザが Web サイトにアクセスすると、ブラウザは独自の UA を Web サイトに送信して、使用されているブラウザとオペレーティング システムのバージョンを Web サイトに通知します。一部の Web サイトでは、UA に基づいて訪問者の正体を判断し、それに応じたクローラー対策措置を講じます。

したがって、PHP を使用してクローラー プログラムを実装する場合、ランダム UA を使用して、Web サイトによって識別されることを回避できます。 PHP の rand() 関数を使用して乱数を生成し、その乱数を UA としてカール リクエストに挿入できます。

コード例:

$ua_list = array(
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.0',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.66 Safari/537.36',
    'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Edge/83.0.478.45',
);
$rand = rand(0, count($ua_list) - 1);
$ua = $ua_list[$rand];

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'http://www.example.com/');
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_PROXY, 'proxy_ip:proxy_port');
curl_setopt($curl, CURLOPT_USERAGENT, $ua);
$result = curl_exec($curl);
curl_close($curl);

上記のコードでは、複数の UA を格納する $ua_list 配列を定義します。rand() 関数を使用して UA をランダムに選択し、追加します。をカールリクエストに追加します。このようにして、UA はリクエストするたびにランダムに変更され、クローラー プログラムの隠蔽性が大幅に向上します。

  1. 確認コード識別を使用する

一部の Web サイトがクローラー プログラムを認識すると、訪問者の本当の身元を確認するための確認コード ページがポップアップ表示されます。クローラーが検証コードを正しく解析できない場合、クローラーは実行を継続できなくなります。

したがって、PHP を使用してクローラ プログラムを実装する場合、検証コード認識技術を使用してこの問題を解決できます。認証コード認識技術には、主に画像処理や機械学習などの分野が含まれます。 PHP の画像処理ライブラリ GD を使用して検証コード画像を処理し、OCR 技術を使用して検証コードを識別できます。

コード例:

$img = imagecreatefrompng('captcha.png');
$width = imagesx($img);
$height = imagesy($img);

for ($y = 0; $y < $height; $y++) {
    for ($x = 0; $x < $width; $x++) {
        $rgb = imagecolorat($img, $x, $y);
        $r = ($rgb >> 16) & 0xFF;
        $g = ($rgb >> 8) & 0xFF;
        $b = $rgb & 0xFF;

        // 处理验证码图片像素
    }
}

// 使用OCR识别验证码

上記のコードでは、imagecreatefrompng() 関数を使用して、検証コード イメージを $img オブジェクトに読み込みます。次に、キャプチャ画像の各ピクセルを反復処理し、各ピクセルの RGB 値を処理します。最後に、OCR テクノロジーを使用して検証コードを識別できます。

概要

この記事では、PHP を使用してクローラ対策機能を備えたクローラ プログラムを実装する方法を紹介します。実装プロセスでは、Web サイトによる識別を回避するためにプロキシ IP、ランダム UA などの技術を使用する必要があります。また、検証コードの問題を解決するために検証コード識別技術を使用する必要もあります。この記事が PHP クローラー プログラムの実装に少しでも役立つことを願っています。

以上がPHPを使用してクローラ対策機能を備えたクローラプログラムを実装する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。