Maison  >  Article  >  développement back-end  >  Bases de la technologie de base du moteur de recherche_php

Bases de la technologie de base du moteur de recherche_php

微波
微波original
2017-06-28 15:37:351229parcourir

Quand il s'agit de moteurs de recherche Web, la plupart des gens pensent à Yahoo. En effet, Yahoo a créé une ère de recherche sur Internet. Cependant, la technologie que Yahoo utilise actuellement pour effectuer des recherches sur le Web n’a pas été développée à l’origine par l’entreprise. En août 2000, Yahoo a adopté la technologie de Google (www.google.com), une société à risque fondée par des étudiants de l'Université de Stanford. La raison est très simple. Le moteur de recherche de Google peut rechercher les informations requises plus rapidement et avec plus de précision que la technologie précédemment utilisée par Yahoo.

Il nous est probablement impossible de concevoir et de développer nous-mêmes un moteur de recherche et une base de données puissants et efficaces dans un court laps de temps en termes de technologie et de fonds. Cependant, puisque Yahoo utilise la technologie d'autres personnes, nous le faisons. Ne pouvons-nous pas également utiliser les sites Web de moteurs de recherche prêts à l'emploi d'autres personnes ?

Analyse des idées de programmation

On peut imaginer ceci : simuler une requête, émettre une commande de recherche dans un format correspondant à un site Web d'un moteur de recherche, puis renvoyer les résultats de la recherche et analyser le code HTML des résultats, supprimez les caractères et codes redondants et enfin affichez-les sur notre propre page Web dans le format requis.

De cette façon, la clé du problème est que nous devons sélectionner des informations de recherche qui sont précises (pour que notre recherche soit plus significative) et rapides (car nous avons besoin de plus de temps pour analyser les résultats de la recherche. et les afficher), un site Web de recherche avec des résultats de recherche concis (pratique pour l'analyse et le dépouillement du code source HTML. En raison des diverses excellentes fonctionnalités du moteur de recherche de nouvelle génération Google, nous le choisissons ici comme exemple pour voir comment utiliser PHP pour). mettre en œuvre le traitement en arrière-plan de la recherche Google (www.google.com) et le processus d'affichage personnalisé frontal.

Voyons d’abord la composition des commandes de requête de Google. Accédez au site Web www.google.com, saisissez « abcd » dans la barre de requête et cliquez sur le bouton de requête. Nous pouvons constater que la barre d'adresse du navigateur se transforme en : « http://www.google.com/search?q=. abcd&btnG=Google %CB%D1%CB%F7&hl=zh-CN&lr=", on peut voir que Google transmet les paramètres de requête et soumet la commande de requête via la méthode get du formulaire. Nous pouvons utiliser la fonction file() en PHP pour simuler ce processus de requête.

Comprendre la fonction File()

Syntaxe : array file(string filename);

La valeur de retour est un tableau et tous les fichiers sont lus dans la variable tableau. Les fichiers ici peuvent être locaux ou distants. Les Fichiers distants doivent préciser le protocole utilisé. Par exemple : result=file("http://www.google.com/search?q=a ... mp;hl=zh-CN&lr="), cette instruction simulera notre requête pour le mot "abcd" sur Processus Google et transférez les résultats de la recherche vers le résultat de la variable du tableau sous forme d'éléments par ligne. Le fichier lu ici étant distant, le nom du protocole « http:// » ne peut pas manquer.

Si vous souhaitez que l'utilisateur saisisse des caractères de recherche pour toute recherche, nous pouvons créer une zone de texte de saisie et un bouton de soumission, et remplacer le caractère recherché "abcd" ci-dessus par une variable :
echo '

'; //Pour un formulaire sans paramètres, la méthode de soumission par défaut est get, soumis à lui-même
echo '' ; / /Construire une zone de saisie de texte
echo ''; //Construire un bouton de soumission de requête
echo '
'; 🎜>
if (isset(mots-clés)) // PHP générera la variable kwywords après la soumission, ce qui nécessite que le programme suivant s'exécute après la soumission
{
urlencode(mots-clés); contenu d'entrée
result=file("http://www.google.com/search?q=". keywords."&btnG=Google%CB%D1%CB%F7&hl=zh-CN&lr="); >/ /Remplacer les variables dans l'instruction de requête et enregistrer les résultats de la requête dans la variable du tableau result
result_string=join(" ", result); //Fusionner le tableau $result dans
string
, chaque tableau element Utiliser des espaces pour coller ... // Traitement ultérieur }
?>

Le programme ci-dessus peut déjà interroger en fonction du contenu saisi par l'utilisateur et renvoyer le résultat est synthétisé dans une variable chaîne $result_string. Veuillez noter que vous devez utiliser la fonction urlencode() pour encoder l'URL des entrées utilisateur, afin de pouvoir interroger les caractères chinois, les espaces et autres
caractères spéciaux
normalement. Cela simulera également la requête de Google de manière aussi réaliste. autant que possible pour garantir l'exactitude des résultats de la recherche. Analyse de Google

Pour faciliter la compréhension, supposons que ce dont nous avons réellement besoin est : le titre des résultats de recherche. URL et introduction, etc. Il s’agit d’une exigence simple et typique. De cette façon, tout ce que nous avons à faire est de supprimer l'en-tête et le pied de page des résultats de recherche Google, y compris le logo Google, la zone de saisie pour une nouvelle recherche, la description du résultat de recherche, etc., et de supprimer le code HTML original du résultat de recherche restant. éléments. Balise Format, remplacez-la par le format souhaité.

Pour ce faire, nous devons analyser soigneusement le code source HTML des résultats de recherche Google et trouver les modèles. Il n'est pas difficile de constater que le texte des résultats de recherche Google est toujours inclus entre la première balise

et l'avant-dernière balise

immédiatement suivi des caractères et du tableau, et cette combinaison "


Toutes les procédures suivantes se poursuivent dans la section « traitement ultérieur » de la procédure ci-dessus.

result_string = strstr( result_string, "

"); //Récupère la chaîne après result_string en commençant par le premier

pour supprimer l'en-tête Google
position= strpos( result_string," La position du

symbole de table
result_string= substr( result_string,0, position);//Intercepter la chaîne avant le premier

symbole de tableau pour supprimer la note de bas de page

Application et implémentation

OK, maintenant que nous avons obtenu l'épine dorsale du code source HTML utile, le problème restant est de savoir comment afficher le contenu indépendamment. Analysons ces éléments de résultats de recherche et découvrons les différences entre chaque élément. régulièrement séparés par
, c'est-à-dire que chacun est un paragraphe. Selon cette fonctionnalité, nous utilisons la fonction éclater() pour couper chaque entrée :

Syntaxe : éclater(séparateur de chaîne, chaîne de caractères)
Renvoie un tableau, et chaque petite chaîne divisée par séparateur est enregistrée dans le tableau

Donc :
result_array=explode("

", result_string). Utilisez la chaîne "

" pour couper les résultats

Nous obtiendrons un tableau result_array, où chaque élément est une entrée de résultat de recherche. Il ne nous reste plus qu'à étudier chaque entrée et son format d'affichage HTML. code, puis remplacez-le si nécessaire. Utilisez une boucle pour traiter chaque entrée dans result_array
for( i=0; i {
... //Traiter chaque entrée<.>}

Pour chaque entrée, nous pouvons facilement trouver certaines caractéristiques : chaque entrée est composée d'un titre, d'un résumé, d'une introduction, d'une catégorie, d'une URL, etc., et chaque partie est renvoyée à la ligne, c'est-à-dire qu'elle contient la marque every_item=explode("
", result_array[ i]);

De cette façon, nous obtenons un tableau each_item, où Every_item[0] est le titre, Every_item[1] et Every_item[2] sont deux lignes de résumé, si les en-têtes de Every_item[3], Every_item[4], etc. contiennent "Introduction :", "< font size=-1 color=#6f6f6f>Catégorie :< /font>" sont des caractères d'introduction ou de catégorie (car certaines entrées de résultat n'ont pas cet élément) , si l'en-tête contient "< font color=green>", il doit s'agir de l'URL. Nous utilisons souvent une
expression régulière
(omise) pour cette comparaison. C'est également très pratique si vous souhaitez la remplacer. , comme inclure un titre $every_item[0] lui-même a un lien. Nous souhaitons modifier cet attribut de lien pour qu'il ouvre le lien dans une nouvelle fenêtre : echo eregi_replace(' { ... // Traiter chaque élément Chaque élément sauf le premier élément (le premier élément est le titre, déjà affiché)
... //Plus de modifications de format
}

De cette façon, les attributs du lien sont modifiés , et bien d'autres sont affichés. La modification, la suppression et le remplacement du format peuvent tous être effectués en utilisant le remplacement régulier eregi_replace().

À ce stade, nous avons obtenu chaque élément de chaque élément de recherche, et pouvons modifier le format de chaque élément à volonté, et même y mettre un beau tableau. Cependant, un bon programme doit être capable de s'adapter à différents environnements d'exploitation, et ici ne fait pas exception. En fait, nous avons seulement discuté d'une méthode-cadre pour la suppression HTML des résultats de recherche. Pour le faire vraiment parfaitement, il y a beaucoup de choses à considérer. , comme Il affiche le nombre total de résultats de recherche, le nombre de pages en lesquelles il est divisé, etc. Il peut même supprimer la « catégorie », « l'introduction » et d'autres codes liés à Google, afin que les clients ne puissent pas voir le site Web d'origine sur tous. Cependant, nous pouvons tous extraire ces contenus et exigences en analysant le HTML. Désormais, chacun peut le faire lui-même et créer un moteur de recherche hautement personnalisé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn