ホームページ >バックエンド開発 >PHPチュートリアル >PHP検索エンジン開発技術の徹底分析、PHP検索エンジン開発_PHPチュートリアル
Web検索エンジンについて話すとき、多くの人はYahooを思い浮かべるでしょう。実際、Yahoo はインターネット検索の時代を築きました。ただし、Yahoo が現在 Web 検索に使用しているテクノロジーは、もともと同社が開発したものではありません。 2000 年 8 月、Yahoo はスタンフォード大学の学生によって設立された Google のテクノロジーを採用しました。その理由は非常に単純です。Google の検索エンジンは、Yahoo が以前に使用していた技術よりも、より速く、より正確に必要な情報を検索できるからです。
強力で効率的な検索エンジンやデータベースを短期間に自分たちで設計・開発することは、技術的にも資金的にもおそらく不可能ですが、Yahooが他人の技術を使っているのですから、私たちもそれを使うことはできるでしょうか?他の人の既製の検索エンジン Web サイトはどうですか?
プログラミングのアイデアの分析
私たちは次のように想像できます: クエリをシミュレートし、対応する形式で検索エンジンの Web サイトに検索コマンドを発行し、検索結果を返し、結果の HTML コードを分析し、冗長な文字とコードを取り除き、最後に必要なキーを押します。当社ウェブサイトのページに表示される形式。
このように、問題の鍵は、正確で(検索がより意味のあるものになるように)、高速で(検索結果を分析して表示するのに余分な時間がかかるため)、検索結果は簡潔です (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()関数を理解する
構文: array file(string filename);
戻り値は配列で、すべてのファイルが配列変数に読み込まれます。ここでのファイルはローカルまたはリモートにすることができ、リモート ファイルは使用されるプロトコルを示す必要があります。例: 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(keywords); 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[0]がタイトル、every_item[1]とevery_item[2]が概要である配列every_itemを取得します。every_item[3]、every_item[4]などのヘッダーに次の内容が含まれている場合「紹介:」、「< font size=-1 color=#6f6f6f>カテゴリ:< /font>」の文字は、ヘッダーに「<」が含まれている場合、紹介またはカテゴリになります (一部の結果エントリにはこの項目がないため)。 font color=green> ";" の場合は、この比較に正規表現を使用することがよくあります (省略)。たとえば、タイトルを含む $every_item[0] を置き換える場合にも非常に便利です。リンク自体を新しいウィンドウで開くためにこのリンクのプロパティを変更したいと思います:
echo eregi_replace(' {
... file:// は、最初の項目を除く各エントリのすべての項目を処理します (最初の項目は表示されているタイトルです)
... file://その他の形式の変更
}
このようにして、リンク属性が変更され、その他の多くの表示形式の変更、削除、置換は、通常の置換 eregi_replace() を使用して完了できます。
この時点で、各検索項目の各項目を取得できており、各項目の形式を任意に変更したり、美しい表を載せたりすることもできます。ただし、優れたプログラムはさまざまな動作環境に適応できる必要があり、ここでも例外ではありません。実際、これを完全に実行するには、HTML の検索結果を除去するためのフレームワーク方法についてのみ説明しました。検索結果の総数やページ数などを表示します。また、「カテゴリ」や「紹介文」などのGoogle関連のコードを削除して、元のWebサイトを閲覧できないようにすることもできます。全て。ただし、HTML を解析することで、これらのコンテンツと要件を抽出することができます。今では誰もが自分で行うことができ、高度にパーソナライズされた検索エンジンを構築できます。
簡単に理解すると、ASP テクノロジーはシンプルで、ウェブサイト構築のほとんどのニーズを満たすことができます。エンジニアリング プラスチックの技術的敷居は低く、それに対応する技術コストも現在市場で最も一般的なテクノロジーです。視点を詳しく分析してみましょう: 1. PHP と ASP について理解したいですか?簡単に理解すると、ASP テクノロジーはシンプルで、Web サイト構築のほとんどのニーズを満たすことができ、エンジニアリング プラスチックの技術的敷居が低く、それに対応する技術コストも市場で一般的に使用されているテクノロジーです。 PHP テクノロジーの技術的敷居は若干高く、技術コストは ASP よりも高くなりますが、PHP の適用が徐々に深まり、現在の PHP ウェブサイト構築コストは許容できるレベルまで削減されています。ウェブサイト構築業界において、PHP ウェブサイト構築技術が ASP 技術に取って代わることは避けられない傾向です。 2. PHP スクリプトの実行は ASP を超えて非常に高速です。 現在、中国工商銀行の Web サイトなど、大規模な Web サイトは基本的に PHP を使用して開発されています。 3. ほとんどの PHP ホストは疑似静的テクノロジーをサポートしていますが、ASP ホストは基本的にこのテクノロジーをサポートしていません。これは、Web サイトでエンジニアリング プラスチックを宣伝するために非常に重要です。さらに、インターネット上の Web サイトのほとんどは ASP Web サイトであり、検索エンジンが新しいものを好み、古いものを嫌う Web サイトははるかに少ないため、Web サイトの最適化と宣伝に役立ちます。また、企業がオンライン マーケティングを実施し、伝統的な産業に別れを告げることも容易になります。 4. ASP テクノロジーは非常に成熟しており、一般的であるため、デザイナーがデザインするのに非常に便利であり、当然のことながら、単純な Web サイトは 1 ~ 2 日で構築できます。 PHP で開発された Web サイトは技術要件が比較的高く、当然ながら作業負荷も高くなるため、制作の人件費も比較的高くなります。 5. PHP 技術を使用すると、より高品質な Web サイト構築技術が提供されます。一般的に、DIV+CSS が使用され、ページ サイズが最小化され、キーワード密度が最も高くなります。
PHP 検索エンジンまたはテンプレート エンジンのことを話していますか? PhpDig などの
検索エンジン
は、PHP で開発された Web クローラーおよび検索エンジンです。動的ページと静的ページのインデックスを作成して語彙を構築します。クエリを検索すると、特定の並べ替えルールに従ってキーワードを含む検索結果ページが表示されます。 PhpDig にはテンプレート システムが含まれており、PDF、Word、Excel、PowerPoint ドキュメントのインデックスを作成できます。 PhpDig には、Spider テクノロジー、Web ページ構造化情報抽出テクノロジーまたはメタデータ収集テクノロジー、および単語分割/インデックス作成テクノロジーという 3 つの最も基本的な検索エンジン テクノロジーが含まれています。従来の検索エンジンとは異なり、PHPdig は、より専門的でより詳細にパーソナライズされた検索エンジンに適しており、特定の分野向けの垂直型検索エンジンを構築するのに最適です。
そのようなオープンソースで無料の php 検索エンジンはたくさんあります: OpenWebSpider、RiSearch PHP
、Sphider、Snoopy、Sphinx、SEO Rank Checker、PHPCrawl、
テンプレート エンジンも多数あります:
Smarty は PHP エンジンで書かれたテンプレートですは現在、業界で最も有名な PHP テンプレート エンジンの 1 つです。論理コードと外部コンテンツを分離し、元々 HTML コードと混在していた PHP コード ロジックを分離する、管理と使用が簡単な方法を提供します。簡単に言うと、その目的は、PHP プログラマーをフロントエンド担当者から分離し、プログラマーがフロントエンド担当者のページ設計に影響を与えることなくプログラムの論理コンテンツを変更し、フロントエンド担当者が影響を与えずにページを再変更できるようにすることです。プログラムのプログラム ロジック これは、複数人の共同作業を伴うプロジェクトでは特に重要です。
Heyes Template Class
ページのレイアウトとデザインをコードから分離するのに役立つ、非常に使いやすく強力で高速なテンプレート エンジンです。
FastTemplate
テンプレートを分析し、HTML コードから変数値を分離する単純な変数補間テンプレート クラス。
ShellPage
Web サイト全体のレイアウトをテンプレート ファイルに基づいて作成できるシンプルで使いやすいクラスです。テンプレートを変更すると、サイト全体を変更できます。
STP Simple Template Parser
シンプル、軽量、使いやすいテンプレート解析クラス。複数のテンプレートからページを組み立て、結果のページをブラウザまたはファイル システムに出力できます。
OO テンプレート クラス
独自のプログラムで使用できる現金指向のテンプレート クラス。
SimpleTemplate
Web サイトを作成および構造化できるテンプレート エンジン。テンプレートを解析してコンパイルできます。
bTemplate
PHP ロジック コードを HTML 装飾コードから分離できる、短くても高速なテンプレート クラス。
Savant
強力で軽量な PEAR 互換のテンプレート システム。これはコンパイルされておらず、PHP 言語自体をテンプレート言語として使用します。
ETS - 簡単テンプレートシステム
全く同じデータを使用してテンプレートを再編成できるテンプレートシステム。
EasyTemplatePHP
あなたのサイトのためのシンプルだが強力なテンプレート システム。
vlibTemplate
キャッシュおよびデバッグ クラスを含む、高速で多用途のテンプレート システム。
AvanTemplate
システム リソースをほとんど消費しない、マルチバイトの安全なテンプレート エンジンです。変数置換をサポートしており、コンテンツ ブロックを表示または非表示に設定できます。