ホームページ >php教程 >php手册 >PHP検索エンジン開発技術チュートリアル

PHP検索エンジン開発技術チュートリアル

WBOY
WBOYオリジナル
2016-06-21 08:57:011220ブラウズ

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

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

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

このように、問題の鍵は、(検索がより意味のあるものになるように) 正確な情報を含む検索結果を選択する必要があることです (検索結果の分析に余分な時間がかかるため)。新世代の検索エンジンである Google にはさまざまな優れた機能があるため、ここでは PHP の使用方法を説明するための例として取り上げます。 Google 検索のバックグラウンド処理とフロントエンドのパーソナライズされた表示プロセスを実装します。

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

File( ) 関数を理解する

構文: 配列ファイル(文字列ファイル名);

戻り値は配列であり、すべてのファイルが配列変数に読み込まれます。ここでのファイルはローカルまたはリモートにすることができ、リモート ファイルは使用されるプロトコルを示す必要があります。例: result=file("http://www.google.com/search?q=a ... mp;hl=zh-CN&lr= ")、このステートメントは、単語「abcd」に対するクエリをシミュレートします。 Google は処理し、検索結果を行ごとの要素の形式で配列変数の結果に転送します。ここで読み取られるファイルはリモートであるため、プロトコル名「http://」が欠落することはできません。

ユーザーに検索文字を入力してもらいたい場合は、入力テキスト ボックスと送信ボタンを作成し、上記の検索文字「abcd」を変数に置き換えます。

エコー '

'; パラメーターなしの file://form、デフォルトの送信メソッドは get、それ自体に送信されます

echo '; file://テキスト入力ボックスを構築します

echo '; file://クエリ送信ボタンを作成します

エコー '

';

if (isset(keywords)) file://送信後、PHP は変数 kkywords を生成します。これには、送信後に次のプログラムを実行する必要があります

{

urlencode( キーワード); file://URL エンコード ユーザー入力

result=file("http://www.google.com/search?q=". キーワード."&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr=");

file:// は、クエリ ステートメントで変数置換を実行し、クエリ結果を配列変数 result

に保存します。

result_string=join(" ", result); file://配列 $result を文字列に結合し、各配列要素の間にスペースを使用します

... file://さらなる処理

}

?﹥

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

Google の分析

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

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

に含まれていることを見つけるのは難しくありません。

マークと最後から 2 番目

タグと最後から 2 番目の

の間

タグの後に表の文字が続き、この組み合わせは「

以下のすべての手順は、上記の手順の「さらなる処理」セクションに続きます。

結果文字列 = strstr(結果文字列, " ");

file://result_string の後の文字列を最初の文字列から取得して、Google ヘッダーを削除します

position= strpos(result_string,"テーブルシンボルの位置

result_string= substr(result_string,0,position);//最初の表記号の前の文字列をインターセプトして脚注を削除します

アプリケーションと実装

これで便利な HTML ソース コード バックボーンができました。残りの問題は、このコンテンツを自律的に表示する方法です。これらの検索結果エントリを再度分析して、各エントリが非常に規則的に区切られていること、つまり、各エントリが段落であることを確認してください。この機能に従って、explode() 関数を使用して各エントリを切り取ります。

構文:explode(文字列区切り文字, 文字列 string);

配列を返し、セパレータで区切られたそれぞれの小さな文字列が配列に保存されます。

それで:

result_array=explode(" ", result_string) file://文字列 " " を使用して結果を分割します

配列 result_array を取得します。各要素は検索結果のエントリです。私たちがしなければならないのは、各エントリとその HTML 表示形式コードを調べて、必要に応じて置き換えるだけです。以下では、ループを使用して result_array 内の各エントリを処理します。

for( i=0; i {

... file:// は各エントリを処理します

}

各エントリについて、いくつかの特徴を簡単に見つけることができます。各エントリは、タイトル、要約、紹介文、カテゴリ、URL などで構成されています。各部分は改行されており、タグが含まれているため、再度分割されています。 : (以下の処理 上記のループ内にプログラムを配置します)

every_item=explode(" ", result_array[ i]);

このようにして、every_item という配列を取得します。every_item[0] はタイトル、every_item[1] と Every_item[2] は 2 行の概要、every_item[3] とevery_item[4] などです。ヘッダーに「 Introduction: "、「< font size=-1 color=#6f6f6f>Category:< /font>」という文字が含まれている場合、これは概要またはカテゴリです (一部の結果エントリにはこの項目がないため)。ヘッダーに「< font color =green>」が含まれている場合は、この種の比較に正規表現を使用することがよくあります (省略)。たとえば、 $every_item[0] を含めるのも非常に便利です。タイトル自体にリンクが含まれているため、リンクのプロパティを変更して新しいウィンドウでリンクを開くようにしてください:

echo eregi_replace(' {

... file:// 最初の項目を除く各エントリのすべての項目を処理します (最初の項目はタイトルであり、すでに表示されています)

... file://その他の形式の変更

}

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

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



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