ホームページ  >  記事  >  バックエンド開発  >  PHP の実践: 効率的な Web クローラー プログラム開発

PHP の実践: 効率的な Web クローラー プログラム開発

WBOY
WBOYオリジナル
2023-06-13 20:19:381387ブラウズ

Web クローラー プログラムとは、インターネット上の情報を自動的に取得して解析するプログラムのことで、データ収集や情報処理のための重要なツールの 1 つです。インターネット時代においてデータは非常に貴重な資産であり、対象となるWebサイトの情報を迅速かつ正確に入手できることは、企業にとっても個人にとっても非常に重要です。 Web クローラーを使用すると、この目標をより効率的に達成できます。

PHP は効率的なプログラミング言語として、優れたネットワーク プログラミング機能と豊富なオープン ソース ライブラリを備えているため、Web クローラー プログラムの開発に非常に適した言語となっています。この記事では、PHP を使用して効率的な Web クローラー プログラムを開発する方法を詳しく紹介します。

1. クローラー プログラムの基本原理

Web クローラー プログラムの基本的な動作原理は、ネットワーク プロトコルを通じて Web ページのソース コードを取得し、特定のルールに従って情報を解析し、最後に、必要なデータをデータベースまたはファイルに保存します。一般的なプロセスは次のとおりです:

1. ターゲット URL にリクエストを送信し、Web ページのソース コードを取得します
2. ソース コード内のリンク、テキスト、画像などの情報を解析します。
3. 必要な情報をデータベースまたは他のファイルに保存します
4. クロール タスクが完了するまで上記の手順を繰り返します

クローラー プログラムの中核部分はパーサーであり、そのパーサーはタスクは、取得した Web ページのソース コードを解析し、必要な情報を抽出することです。 Web ページのソース コードの解析は、通常、フレームワークによって提供される正規表現または解析関数を使用して実装されます。正規表現はより柔軟に使用できますが、複雑でエラーが発生しやすいため、フレームワークが提供する解析関数を使用すると使いやすくなりますが、制限もあります。

2. Web クローラー プログラムの実践的な開発

この記事では、簡単な Web クローラー プログラムの開発を例に、その開発プロセスを紹介します。

  1. 要件の決定

Web クローラー プログラムを開発する前に、まずクロールする対象の Web サイトとクロールする必要がある情報を明確にする必要があります。この記事では、新浪ニュースの人気おすすめをクロールする例を取り上げます。要件は、新浪ニュースのホームページ上で人気のあるニュースの推奨タイトルとリンクをクロールし、データベースに保存することです。

  1. Web ページのソース コードを取得する

PHP では、curl 関数ライブラリを使用して Web ページのソース コードを取得できます。次のコードは、curl 関数ライブラリを使用して、新浪ニュースのホームページの Web ページのソース コードを取得する方法を示しています。

<?php

$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

echo $html;

?>

上記のコードは、curl 関数ライブラリを使用して、新浪ニュースのホームページにリクエストを送信し、その Web ページのソース コードを取得します。 curl_setopt() 関数は、ページを取得した後に返された結果を文字列として設定し、要求された Web ページのリファラーを自動的に設定します。

  1. 情報の解析

Web ページのソース コードを取得したら、その中の情報を解析して必要なデータを抽出する必要があります。 PHP では、フレームワークが提供する正規表現または解析関数を使用してこれを実現できます。以下のコードは、PHP の組み込み DOMDocument クラスを使用してニュースの見出しとリンクを抽出する方法を示しています。

<?php

$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    echo $title . ' ' . $link . PHP_EOL;
}

?>

上記のコードでは、//div[@class="blk12"]/h2/a は XPath 式であり、クラス属性 "blk12" a を持つ div 要素の下にあるすべての h2 要素を選択するために使用されます。要素。プログラムは、foreach ループを使用して、取得したすべての a 要素を走査し、DOMNode の nodeValue メソッドと getAttribute() メソッドを操作して、その text 属性値と href 属性値を取得します。

  1. データの保存

クロールされた情報を取得したら、データベースに保存する必要があります。この記事では、例として MySQL データベースを使用します。以下のコードは、スクレイピングしたニュースのタイトルとリンクを MySQL データベースに保存する方法を示しています。

<?php

// 连接数据库
$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'test';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};dbname={$database};charset={$charset}";
$pdo = new PDO($dsn, $user, $password);

// 获取新浪新闻主页热门推荐新闻标题和链接
$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

// 插入数据库
$sql = "INSERT INTO news(title, link) VALUES(:title, :link)";
$stmt = $pdo->prepare($sql);

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    $stmt->bindParam(':title', $title);
    $stmt->bindParam(':link', $link);
    $stmt->execute();
}

?>

上記のコードでは、PDO を使用して MySQL データベースに接続し、ニュースのタイトルとリンクを保存するために news という名前のデータ テーブルが定義されています。このプログラムは、PDO の prepare() 関数と bindingParam() 関数を使用して、SQL インジェクション攻撃とデータ型エラーを回避します。

  1. 完全なコード

上記のコードを組み合わせることで、単純な Web クローラー プログラムを取得できます。完全なコードは次のとおりです:

<?php

// 连接数据库
$host = 'localhost';
$user = 'root';
$password = 'root';
$database = 'test';
$charset = 'utf8mb4';
$dsn = "mysql:host={$host};dbname={$database};charset={$charset}";
$pdo = new PDO($dsn, $user, $password);

// 获取新浪新闻主页热门推荐新闻标题和链接
$url = 'http://news.sina.com.cn/';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$html = curl_exec($ch);
curl_close($ch);

// 使用 DOMDocument 类解析 HTML
$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$news_list = $xpath->query('//div[@class="blk12"]/h2/a');

// 插入数据库
$sql = "INSERT INTO news(title, link) VALUES(:title, :link)";
$stmt = $pdo->prepare($sql);

foreach ($news_list as $news) {
    $title = trim($news->nodeValue);
    $link = $news->getAttribute('href');
    $stmt->bindParam(':title', $title);
    $stmt->bindParam(':link', $link);
    $stmt->execute();
}

?>

3. まとめ

Web クローラー プログラムの開発には、ネットワーク プログラミング、情報分析、データ ストレージなどを含む複数のテクノロジーの使用が必要です。 PHP は効率的なプログラミング言語として、ネットワーク プログラミングにおいて優れた利点を持っており、その豊富なオープンソース クラス ライブラリにより、PHP は Web クローラー プログラムの開発に非常に適した言語となっています。

実際の開発では、Web クローラー プログラムは、法令順守、データ プライバシー、抗クローラー メカニズムなどの問題に注意を払う必要があります。開発者は法令順守を前提に適切な開発を行う必要があります。同時に、プログラムのリクエスト速度、ランダムな HTTP リクエスト ヘッダー、プロキシ IP の使用などの適切な設定により、クローラ対策メカニズムによるブロックを効果的に回避できます。

Web クローラー プログラムを開発するには、実際のニーズと実現可能性を十分に考慮し、適切なテクノロジと戦略を選択する必要があります。この記事で提供されているサンプル コードは単純な実装にすぎません。より完全なクローラー プログラムが必要な場合は、関連する知識をさらに学習する必要があります。

以上がPHP の実践: 効率的な Web クローラー プログラム開発の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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