PHP で検索エンジンを構築するためのいくつかのアイデア_PHP チュートリアル

WBOY
リリース: 2016-07-13 10:38:18
オリジナル
826 人が閲覧しました

この記事の原文は次から転載されています: http://blog.csdn.net/guoguo1980/archive/2006/08/24/1112768.aspx

この記事の著者: guoguo1980

記事の概要:

編集者注: これは、検索エンジンの原理を詳細に分析するだけでなく、PHP を使用して検索エンジンをコンパイルすることに関する著者自身のアイデアのいくつかも提供する、素晴らしいプログラミング教育記事です。記事全体が簡単な言葉で説明されており、専門家も初心者も多くのインスピレーションを得ることができると思います。

ウェブ検索エンジンについて話すとき、ほとんどの人はYahooを思い浮かべるでしょう。実際、Yahoo はインターネット検索の時代を築きました。しかし、Yahoo が現在ウェブ検索に使用しているテクノロジーは、同社が元々開発したものではありません。 2000 年 8 月、Yahoo はスタンフォード大学の学生によって設立されたベンチャー企業 Google (www.Google.com) のテクノロジーを採用しました。その理由は非常に単純です。Google の検索エンジンは、Yahoo が以前に使用していた技術よりも、より速く、より正確に必要な情報を検索できるからです。

強力で効率的な検索エンジンとデータベースを短期間に自分たちで設計、開発することは、技術的にも資金的にもおそらく不可能でしょう。しかし、Yahoo は他人の技術を使用しているのですから、そうすべきではないでしょうか。他の人の既製の検索エンジン Web サイトも使用できますか?

プログラミングのアイデアの分析

私たちは次のように想像できます: クエリをシミュレートし、対応する形式で検索エンジンの Web サイトに検索コマンドを発行し、検索結果を返し、結果の HTML コードを分析し、冗長な部分を削除します。最終的には、必要な形式で当社 Web サイトのページに表示されます。

このように、問題の鍵は、(検索がより意味のあるものになるように) 正確で、(検索結果を分析して表示するのに余分な時間がかかるため) 高速な検索情報を選択する必要があるということです。 、新世代の検索エンジンである Google のさまざまな優れた機能により、検索結果は簡潔 (HTML ソース コードの分析やストリッピングに便利) な検索 Web サイトです。ここでは、PHP を使用してバックグラウンドを実装する方法を確認する例として選択します。 Google (www.Google.com) 検索およびフロントエンドのパーソナライズされた表示プロセスの処理。

まず、Google のクエリコマンドの構造を見てみましょう。 www.Google.com Web サイトに入り、クエリ バーに「abcd」と入力し、クエリ ボタンをクリックすると、ブラウザのアドレス バーが次のように変化することがわかります: http://www.Google.com/search? q= abcd&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr= を見ると、Google がクエリ パラメータを渡し、フォームの get メソッドを通じてクエリ コマンドを送信していることがわかります。 PHP の file() 関数を使用して、このクエリ プロセスをシミュレートできます。

File()関数を理解する

構文: array file(string filename);

戻り値は配列であり、すべてのファイルが配列変数に読み込まれます。ここでのファイルはローカルまたはリモートにすることができ、リモート ファイルは使用されるプロトコルを示す必要があります。例: result=file(“http://www.Google.com/search?q=abcd&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr=”)、このステートメントは何をシミュレートしますかGoogle で単語「abcd」をクエリし、その検索結果を要素の各行の形式で配列変数 result に返すプロセスを実行しています。ここで読み込まれるファイルはリモートであるため、プロトコル名「http://」が欠落することはできません。

任意の検索でユーザーに検索文字を入力してもらいたい場合は、入力テキスト ボックスと送信ボタンを作成し、上記の検索文字「abcd」を変数に置き換えます。
echo
; //パラメータなしでフォーム、デフォルトの送信メソッドは get、submit to です
echo; // テキスト入力ボックスを構築します
echo; // クエリ送信ボタンを構築します

if (isset( $keywords)) // 送信後の PHP変数 kkywords が生成されます。これには、送信後に次のプログラムを実行する必要があります
{
urlencode( $keywords) // ユーザー入力コンテンツを URL エンコードします
result=file(http://www.Google.com/search) ?q =. $keywords.&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr=);
//クエリ ステートメント内の変数を置換し、クエリ結果を配列変数 result に保存します
$result_string=join( , result ); // 配列 $result を文字列に結合し、各配列要素の間にスペースを使用します
... // さらなる処理
?> 注:


上記を使用できます
file_get_contents()関数を実現するには、$result_string=file_get_contents("http://....") 上記のプログラムはすでにユーザーの入力内容に従ってクエリを実行でき、返された結果は文字列変数 $result_string に合成されます。入力された漢字、スペース、その他の特殊文字を正常にクエリできるように、urlencode() 関数を使用してユーザー入力を URL エンコードする必要があることに注意してください。これにより、Google のクエリ コマンドが可能な限り現実的にシミュレートされ、検索が確実になります。結果は正確です。

Googleの分析

理解を容易にするために、本当に必要なのは検索結果のタイトルであると仮定しましょう。 URLや紹介文など。これはシンプルかつ典型的な要件です。このようにして、Google ロゴ、再検索用の入力ボックス、検索結果の説明などを含む Google 検索結果のヘッダーとフッターを削除し、残りの検索結果から元の HTML を削除するだけです。項目のフォーマットタグを希望のフォーマットに置き換えます。

これを行うには、Google 検索結果の HTML ソース コードを注意深く分析し、パターンを見つける必要があります。 Google 検索結果のテキストがソース コードの最初の
タグと最後から 2 番目の

タグの間に常に含まれており、最後から 2 番目の

タグの後に表文字が続き、この組み合わせ「
」を見つけるのは難しくありません。

以下の手順は全て上記手順の「その後の処理」に続きます

result_string = strstr(result_string,

) //result_string以降の文字列を最初の

から取得し、Googleヘッダーを削除します。
position= strpos( result_string,

table シンボルの位置
result_string= substr( result_string,0, Position);//最初の

table シンボルの前の文字列をインターセプトして、脚注を削除します

アプリケーション OK、これで完了です有用な HTML ソース コードのバックボーンを取得しました。残りの問題は、このコンテンツをどのように独立して表示するかです。これらの検索結果項目を分析して、各項目の間に非常に規則的な用途があることを確認してください。つまり、各項目が分割されています。この機能に従って、explode() 関数を使用して各項目を分割します。

構文:explode(string separator, string string);

区切り文字に従って分割した後、配列を返します。
result_array=explode(

, result_string); //文字列

を使用して結果を分割します

各要素が検索結果エントリである配列を取得します。各エントリとその HTML 表示形式コードを調べて、必要に応じてループを使用して、result_array (
for ( i = 0; i ) の各エントリを処理しましょう。{
... //各エントリの処理
}

各エントリについて、いくつかの特徴も簡単に見つけることができます。各エントリはタイトル、要約、紹介、カテゴリ、URL などで構成されており、各部分は改行、つまり
が含まれています。 (次のハンドラーは上記のループに配置されます)
every_item=explode(
, result_array[ i]);

このようにして、every_item[0] が Title となる配列を取得します。 、every_item[1]、every_item[2] は 2 行の概要です、every_item[3]、every_item[4] などのヘッダーに「 Introduction: 」、「< font size=-1 color=#6f6f6f>」が含まれている場合。 ; カテゴリ :< /font> 文字、これは紹介またはカテゴリです (一部の結果エントリにはこの項目がないため)。ヘッダーに「< font color=green>」が含まれる場合、それは URL である必要があります。たとえば、タイトルを含む $every_item[0] 自体にリンクがある場合、このリンク属性を変更してリンクを開くようにしたい場合は、正規表現を使用することも非常に便利です。新しいウィンドウで:
echo eregi_replace ({
... //各エントリの最初の項目を除くすべての項目を処理します (最初の項目は表示されているタイトルです)
... //その他の形式の変更
}

これはリンク属性を変更します。その他の多くの表示形式の変更、削除、置換は、通常の置換 eregi_replace() を使用して完了できます。

この時点で、各検索項目の各項目を取得できており、各項目の形式を任意に変更したり、美しい表を載せたりすることもできます。ただし、優れたプログラムはさまざまな動作環境に適応できる必要があり、これも例外ではありません。実際、これを完全に実行するには、HTML の検索結果を除去するためのフレームワーク方法についてのみ説明しました。検索結果の総数やページ数などを表示します。また、「カテゴリ」や「紹介文」などのGoogle関連のコードを削除して、元のWebサイトを閲覧できないようにすることもできます。全て。ただし、HTML を解析することで、これらのコンテンツと要件を抽出することができます。今では誰もが自分で行うことができ、高度にパーソナライズされた検索エンジンを構築できます。




http://www.bkjia.com/PHPjc/735095.html
www.bkjia.com

tru​​ehttp://www.bkjia.com/PHPjc/735095.html技術記事この記事の原文は次から転載されています: http://blog.csdn.net/guoguo1980/archive/2006/08/24/1112768.aspx この記事の著者: guoguo1980 記事の概要: 編集者注: これは素晴らしいプログラミングです教育記事... .
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート