インターネット技術の発展に伴い、クローラー プログラムの適用はますます広まっています。データ分析やマイニングのためのクローラー プログラムを通じて、インターネット上のデータを自動的に取得できます。クローラーの数が増加するにつれて、一部の Web サイトではデータを保護するために抗クローラー テクノロジーを使用し始めています。したがって、PHP を使用してクローラー プログラムを実装するプロセスでは、アンチクローラー テクノロジの課題に対処する方法も考慮する必要があります。
この記事では、PHP を使用してクローラ対策機能を備えたクローラ プログラムを実装する方法を紹介します。
まず、クロールする Web サイトを決定する必要があります。一部の小規模な Web サイトの場合は、Web ページを直接クロールしてデータを抽出できます。しかし、一部の大規模な Web サイトでは、クローリングを阻止するためにアンチクローラー技術が使用されることがよくあります。
したがって、クロールする Web サイトを決定するときは、まずその Web サイトがクロール防止テクノロジーを使用しているかどうかを理解する必要があります。使用する場合には、クローラ対策技術の種類と具体的な実装方法を理解し、それに応じた対策を講じる必要があります。
プロキシ 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 サイトのデータを正常にリクエストして取得できます。
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 はリクエストするたびにランダムに変更され、クローラー プログラムの隠蔽性が大幅に向上します。
一部の 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 サイトの他の関連記事を参照してください。