C’est beaucoup d’idées de gens d’avoir notre propre moteur de recherche, mais comment pouvons-nous avoir notre propre moteur de recherche? Maintenant, l'éditeur vous apprendra à utiliser les méthodes de collecte de données populaires actuelles pour implémenter votre propre moteur de recherche. Jetons maintenant un œil aux méthodes pour construire votre propre moteur de recherche.
1. Comprendre la recherche de baidu
Baidu Search, le plus grand moteur de recherche chinois du monde, a été répertorié sur le NASDAQ aux États-Unis le 5 août 2005. Il s'agit actuellement du moteur de recherche avec le taux d'utilisation le plus élevé en Chine, fournissant diverses recherches telles que des pages Web, des nouvelles, des images, de la musique, des cartes, etc.
1. Paramètres de requête pour la recherche Web Baidu
Paramètres requis
☆ WD - Mot de clé pour la requête (mot-clé)
☆ PN - Nombre de pages montrant le résultat (PageNumber)
☆ CL - Type de recherche (classe), cl = 3 est la recherche Web
Paramètres facultatifs
☆ RN - Le nombre de résultats de recherche (enregistrement record), la plage de valeur se situe entre 10 et 100, le paramètre par défaut est RN = 10
☆ ie - Quey le codage du texte d'entrée (entrée encoding), le paramètre par défaut est ie = gb2312, qui est un chinois simplifié
☆ TN - Le site source pour soumettre une demande de recherche
Plusieurs TN utiles
tn = baidualocal signifie que les recherches sur le site de Baidu, les résultats retournés sont très propres et il n'y a pas d'interférence AD. Par exemple, recherchez le bonheur sur Baidu pour voir si les résultats sont rafraîchissants.
tn = baiducnnic veut mettre Baidu dans le cadre? Essayez simplement ce paramètre, il est personnalisé par baidu pour cnnic
☆ SI- SECTURE DANS LES NOM DE DOMAINS LIMITÉS. Par exemple, si vous souhaitez rechercher sur le site Web de Sina, vous pouvez utiliser le paramètre si = sina.com.cn. Pour rendre ce paramètre efficace, vous devez l'utiliser en conjonction avec le paramètre CT.
☆ CT - La valeur de ce paramètre est généralement une chaîne de nombres, qui est estimée comme le code de vérification de la demande de recherche.
Utilisez des paramètres SI et CT en combinaison, par exemple, à la recherche d'idéaux dans sina.com.cn, disponible: http://www.baidu.com/baidu?ie=utf-8&am...n&cl=3&word=IDEAL
☆ BS - Le mot-clé de la dernière recherche (beforesearch), qui est estimé comme lié aux recherches connexes.
2. Structure de la page de résultats de la recherche de Baidu
Selon la structure du code source, le haut de gamme est:
Recherche de recherche
Classement fixe des zones chaudes à droite
Résultats de la recherche
Zone de pagination
Recherches connexes
Boîte de recherche inférieure
Zone de droit d'auteur
Les résultats de recherche et la zone de pagination sont les données valides dont nous avons besoin. Selon les résultats du code, vous pouvez trouver son identifiant de chaîne unique. Utilisez simplement cet identifiant pour intercepter le contenu. Pour plus de détails, regardez le code suivant.
2. Fonction de base - composant xmlhttp à l'aide d'ASP
Le programme de collecte de données, communément appelé programme Thief, est la partie fondamentale de ce composant XMLHTTP. Il est un peu démodé d'utiliser XMLHTTP pour collecter des données, et il y a aussi beaucoup d'informations en ligne. Généralement, le code de collecte est
setThttp = server.createObject (msxml2.xmlhttp)
Http.openget, url, false open xmlhttp
Http.send () 'Envoyer une demande
ifhttp.readystate <> 4Then
sortie
endire
GethTTPPAGE = BYTESTOBSTR (Http.ResponseBody, GB2312) 'Renvoie le résultat (généralement un flux d'octet) et convertissez le flux d'octets en une chaîne
setTHTP = rien
Voir le code complet ci-dessous pour une application détaillée
3. Code complet (nom de fichier: seardi_bd.asp)
<%
option Explicit
Dimwd, pn
wd = demande (wd)
pn = request.querystring (pn)
'Démarrer la gestion des erreurs
Onerrorresumenext
IFerr.Number <> 0THEN
Réponse.
'Afficher le message d'erreur à l'utilisateur
Il y a une erreur dans la réponse.Write <palign = 'Center'> <fontsize = 3>, veuillez ouvrir à nouveau la recherche de baidu. </font> </p>
endire
%>
<html>
<adal>
<Title> Recherche de Baidu - <% = wd%> </Title>
</ Head>
<Styletype = Text / CSS>
<! -
Corps, TD {Font-Family: Arial}
TD {Font-Size: 9pt; Line-Height: 18px}
.Cred {Color: # FF0000}
// ->
</ Style>
<BodyLeftMargin = 0Topmargin = 3marginwidth = 0marginheight = 0>
<TableALIGN = CenterWidth = 98% Cellpacing = 0CellPadding = 0Border = 0BGColor = # ffffff>
<tr>
<formName = f1Method = PostAction = SearchI_BD.asp>
<tdWidth = 150Height = 50>
Votre logo
</td>
<tdalign = Left>
<inputName = wdSize = 40MaxLength = 100Title = Entrez les mots clés, puis laissez-nous rechercher ... Value = <% = wd% >>
<futType = soumidValue = Baidu Search>
</td> </ form> </tr>
</ table>
<%
Dimstrurl, strtmp_bd, strinfo, strpage, strpagesum_bd, strqtime_bd
Dimbnoresult_bd, regex, patn
'Chaîne de requête Baidu
strurl = http: //www.baidu.com/s? ie = gb2312 & wd = & wd & am ... & pn && cl = 3
'Commencez la collection
strtmp_bd = gethttppage (strurl)
IFinstr (strtmp_bd, non trouvé et votre requête) <> 0THEN
bNORESULT_BD = 1
Endire
'Intercepter le contenu de la section Résultats de la recherche
strinfo = strcut (strtmp_bd, <vid = scriptdiv> </div>, <rrClear = all>, 2)
Patn = </td> </tr> </ table> <br>
SetRegex = newRegexp 'crée une expression régulière.
regex.Pattern = mode Patn'set.
regex.ignorecase = true
regex.global = false
strinfo = regex.replace (strinfo,)
«Seagir le contenu de la zone de pagination
strpage = strcut (strtmp_bd, <brclear = all>, <br>, 2)
strpage = remplacer (strpage, href = s ?, href = seardi_bd.asp?)
'Le nombre de résultats et de temps
strpagesum_bd = strcut (strtmp_bd, trouvez la page Web pertinente, article, 2)
ifnotisnumeric (strpagesum_bd) alors
strpagesum_bd = strcut (strtmp_bd, trouvez la page Web pertinente, article, 2)
endire
strqtime_bd = strcut (strtmp_bd, temps, secondes, 2)
Setstrtmp_bd = rien
%>
<! - T1-start ->
<TableCellPacing = 0CellPadding = 0Border = 0Width = 98% Align = Center>
<trvalign = Centeralign = MiddleHeight = 18>
<tdWidth = 1BGColor = # 999999>
<tdnowrapstyle = font-weight: bold; couleur: #ffffff; background-color: # 0033ccwidth = 64> Internet </td>
<tdalign = lightbgcolor = # eeeeeeee> <nobr> trouvez des pages Web pertinentes qui correspondent <b> <% = wd%> </b> <b> <% = strpagesum_bd %> </b>, et prennent <b> <% = strqtime_bd%> </b> secondes </ noBr> </td>
</tr>
<tr> <tdbgColor = # 999999ColSpan = 3Height = 2> </td> </tr> </ Table>
</td>
</tr>
</ table>
<%
ifwd = alors
Response.Write <palign = 'Center'> <fontsize = -1> Bonjour, veuillez saisir les mots clés dans la zone de recherche. </font> </p>
elseIfBnoResult_Bd = 1Then
Response.Write <palign = 'Center'> <FonTSize = -1> Désolé, aucune information qui remplit vos conditions de requête n'a été trouvée. Veuillez resélectionner le mot-clé approprié à la requête. </font> </p>
autre
%>
<TableWidth = 98% Align = CentergellSpace = 0Cellpacing = 0CellPadding = 0Border = 0>
<tr>
<tdstyle = line-height: 160% bgcolor = # ffffffwidth = 75% valign = top> <br>
<% = strinfo%>
</td>
<tdWidth = 25% valign = top> <br> C'est l'espace pour que vous jouiez!
</td>
</tr>
</ table>
<TableWidth = 98% Align = CenternellSpace = 0Cellpacing = 0CellPadding = 4Border = 0>
<tr>
<tdalign = Center>
<br> <fontsize = 3> <% = strpage%> </font>
</td>
</tr>
</ table>
<% Endif
setStrinfo = rien
%>
<hrsize = 1Width = 760Color = # 0000FF>
<divalign = Center> <fonTSize = -1>
Veuillez aller sur <panclass = cred> (Forum de partage des connaissances) </span> pour afficher </font>
</div>
</docy>
</html>
<%
«Collection de fonctions
FonctionGethTTPPAGE (URL)
Onerrorresumenext
dimhttp
setThttp = server.createObject (msxml2.xmlhttp)
Http.openget, url, false
Http.send ()
ifhttp.readystate <> 4Then
sortie
endire
GethtTppage = ByTestObstr (Http.ResponseBody, GB2312)
setTHTP = rien
IFerr.Number <> 0THEN
Response.Write <divalign = 'Center'> <b> Le serveur erroné dans l'obtention du contenu de fichier </b> </div>
Err.Clear
Endire
Finition de fin
'Le flux d'octet se convertit en chaîne
FunctionByTestobstr (corps, CSET)
dimobjstream
setObjstream = server.createObject (Adodb.stream)
objstream.type = 1
objstream.mode = 3
objstream.open
objstream.writebody
objstream.position = 0
objstream.type = 2
objstream.charset = cset
ByTestObstr = objstream.readText
objstream.close
setObjstream = rien
Finition de fin
'Intercepting String, 1. Comprend avant et après les chaînes, 2. Sans inclure avant et après les chaînes
Functionstrcut (StrContent, Startstr, Endstr, CutType)
DIMS1, S2
Onerrorresumenext
selectcascuttype
Cas1
S1 = instant (StrContent, Startstr)
S2 = instant (S1, StrContent, Endstr) + Len (ENDSTR)
Cas2
S1 = instant (StrContent, Startstr) + Len (Startstr)
S2 = instant (S1, StrContent, Endstr)
Se licez
Idierrhen
strcute = <palign = 'Center'> <fontsize = -1> Une erreur s'est produite en interceptant la chaîne. </font> </p>
Err.Clear
Sortie
Autre
strcut = mid (strContent, s1, s2-s1)
Endire
Finition de fin
%>
Copiez le code ci-dessus sur le bloc-notes et enregistrez-le en tant que SearchI_BD.asp, et vous pouvez l'utiliser. Si vous souhaitez modifier le nom du fichier, veuillez également modifier la partie d'identification bleue du code suivant dans votre nom de fichier
strpage = remplacer (strpage, href = s ?, href = seardi_bd.asp?)
Quelques explications:
1. La recherche de Baidu n'a essentiellement aucune mesure anti-collection. Le point principal est que Baidu modifiera le code source de la page de résultat de retour de temps en temps, vous devez donc souvent observer la page de résultat de la recherche de Baidu. Si le code change, vous pouvez modifier le logo String. En termes d'anti-collection, Baidu est beaucoup plus généreux que Google. À l'heure actuelle, aucun phénomène de blocage temporairement de l'IP du site source en raison de la requête fréquente de Baidu. Ce phénomène se produit souvent dans les requêtes Google. Comment le résoudre est discuté dans le prochain article.
2. La collecte est plus consommatrice de ressources, et la recherche de voleurs est la même que la recherche de programmes, alors essayez de publier des variables ou des objets le plus tôt possible dans le programme. Si vous n'avez pas beaucoup de ressources spatiales, il est recommandé de ne pas faire ces choses.
3. Certaines personnes peuvent ne pas vouloir conserver les connexions fonctionnelles de Baidu dans le voleur de recherche qu'ils font, comme les instantanés Baidu et les fonctions de recherche sur place. Pour cette raison, je fournis une version simplifiée sans aucune connexion à Baidu dans le package de téléchargement. Vous pouvez l'utiliser selon les besoins. Le code ne sera pas répertorié dans cet article, qui est en fait similaire à la version complète.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous, et j'espère que tout le monde soutiendra le mauvais canal de la nouvelle technologie.