PHP が信頼性の高い Web クローラーを実装し、効果的な情報を取得する方法
インターネットの発展とデータ量の増加に伴い、Web クローラーの需要がますます高まっています。クローラーは、インターネットから大規模なデータを自動的に収集、抽出、処理、保存し、あらゆる分野のアプリケーションの基盤とサポートを提供します。この記事では、PHP を使用して信頼性の高い Web クローラーを実装し、効果的な情報を取得する方法を紹介します。
1. クローラーの原理
Web クローラーは、Web スパイダー、Web ロボット、Web ハーベスター、自動インデクサー、またはスパイダー プログラムとも呼ばれ、自動的にブラウズ、インデックス付け、クロールできるプログラムです。インターネット上のさまざまな情報。原理は、HTTP プロトコルを通じてターゲット Web サイトにリクエストを送信し、Web サイトから返されたデータ内の HTML コンテンツとメタデータを解析し、ターゲット情報を抽出して保存することです。 Web クローラーの実装には、次の要素が必要です。
1) HTTP リクエスト: HTTP プロトコルは、最も広く使用されているプロトコルの 1 つです。インターネット上では、クライアントは HTTP リクエストを通じてサーバーにコンテンツを要求します。 HTTP リクエストは、HTTP メソッド、リクエスト リソース識別子、プロトコル バージョン、リクエスト ヘッダー、リクエスト本文で構成されます。
2) HTTP 応答: HTTP 応答は、リクエストに対するサーバーの応答です。これは、ステータス行 (ステータス コードとステータス フレーズ)、応答ヘッダー、および応答本文で構成されます。応答本文は、要求されたリソースのコンテンツです。
HTML は Web ページのデザインに使用されるマークアップ言語で、英語のタグを使用してテキスト、画像、音声、その他の要素を Web ページに埋め込みます。ウェブページ。したがって、Web クローラーを実装するプロセスでは、HTML ドキュメントの構造、タグのセマンティクス、およびその他のメタデータを理解できる必要があります。
データの視覚化とクエリを実現するには、キャプチャしたデータを構造化してデータベースまたはファイルに保存する必要があります。これには、データベースの構造と SQL 言語を理解する必要があります。
2. PHP クローラーの実装
PHP では、サードパーティのクローラー フレームワークを使用することも、自分でクローラーを実装することもできます。よく使用される 2 つの方法を次に示します:
1. サードパーティのクローラー フレームワークを使用する
1) Goutte
Goutte は、PHP 5.3 の Web クローラーおよび Web 抽出コンポーネントです。実際のブラウザをシミュレートし、データの抽出と操作を容易にする jQuery ライクな操作 API を提供し、Cookie や HTTP プロキシなどの機能もサポートします。その使いやすさ、サポート、柔軟性により、近年ますます多くの開発者が Web クローラーを構築するためにこのライブラリを選択しています。
2) PHP-Webdriver
PHP-Webdriver は、PHP コードが Selenium WebDriver (または他の WebDriver) と通信し、ブラウザーの実行プロセスを制御できるようにする PHP の Selenium クライアント ライブラリです。これは、動的ページからデータをクロールする必要がある例に適しています。例: JS を使用してレンダリングされたテーブルなど。
例:
Goutte のインストール:
composer require fabpot/goutte:^3.2
Goutte の使用:
use GoutteClient; $client = new Client(); $crawler = $client->request('GET', 'https://www.baidu.com/'); $form = $crawler->filter('#form')->form(); $crawler = $client->submit($form, array('q' => 'search'));
2. 手書き PHP クローラー
手書きクローラーの利点クローラーの動作をより深く理解できるため、より詳細でパーソナライズされた構成を行うことができます。この時点で、ページのリクエスト、ページの解析、データの保存の 3 つの部分に分けることができます。
1) ページのリクエスト
PHP の CURL 拡張機能を使用して、ページ コンテンツを取得する HTTP リクエストをシミュレートします。 CURL は、HTTP プロトコルに基づいてリクエストを送信し、指定された URL に対する HTTP 応答を返すことができます。
$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_TIMEOUT, 30); $content = curl_exec($ch);
2) ページを解析する
PHP の DOMDocument クラスを使用して HTML ページを解析し、DOM ツリーを構築し、XPath テクノロジ (XML および HTML ドキュメントのクエリ言語) を使用してページを抽出しますルールによるコンテンツ。
$dom = new DOMDocument(); @$dom->loadHTML($content); $xPath = new DOMXPath($dom); $items = $xpath->query("//div[@class='items']//h2//a"); foreach ($items as $item) { $title = trim($item->childNodes->item(0)->nodeValue); $link = $item->attributes->getNamedItem("href")->nodeValue; $data[] = array( "title" => $title, "link" => $link ); }
3) データの保存
ページからキャプチャしたデータをデータベースまたはファイルに保存します。 MySQL や MongoDb などのデータベースをデータの保存に使用できます。
$mysql = new mysqli('localhost', 'username', 'password', 'db'); foreach ($data as $item) { $title = $mysql->real_escape_string($item['title']); $link = $mysql->real_escape_string($item['link']); $sql = "INSERT INTO table(title,link) VALUES ('$title','$link')"; if ($mysql->query($sql) === true) { $inserted[] = $item; } }
3. クロール プロセス中の注意点
クローラーの動作を制限するために、一部のWeb サイトは、確認コードの使用、IP のブロック、速度制限など、クローラーをブロックするためにいくつかのテクノロジーを使用します。クローラー対策ポリシーによる制限を回避するには、Web サイトのクローラー対策テクノロジーに基づいた制限を回避する必要があります。
クローリング プロセス中に、IP が Web サイトによってブロックされる場合があります。簡単な方法は、プロキシ IP を使用して Web サイトにアクセスすることです。同時に、プロキシ IP プールを使用して、IP がブロックされるリスクを軽減できます。
リクエストが頻繁に発生すると、クローラ対策メカニズムに障害が発生する可能性があるため、クローラ リクエストの速度を適切に制御する必要があります。実装方法には、スリープ メソッドを使用して 2 つのリクエスト間の時間間隔を制御すること、メッセージ キューを使用して指定された期間内に送信されるメッセージの数を制御すること、リクエストを複数の期間に分散して短期間での頻繁なリクエストを回避することが含まれます。時間。
4. 結論
Web クローラーは、大量のデータを迅速に取得して整理するのに役立つ、非常に便利で実用的なテクノロジーです。この記事では、PHP を使用して信頼性の高い Web クローラーを実装する方法を紹介し、クローラーの基本原理、関連フレームワーク、クローラーを手動で作成するプロセス、およびクローリング プロセス中に注意すべき点を理解します。この記事が、将来 Web クローラーを作成する際の実践的なアプリケーションに役立つことを願っています。
以上がPHP を使用して信頼性の高い Web クローラーを実装し、効果的な情報を取得する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。