Noi facem un motor de cautare: Robotul de cautare
cum să faci un motor de căutare?
cum se face un robot de căutare, păianjen, crawler, indexer (spider, crawler) pe Delphi?
Ordinea traverselor paginii, frecvența vizitelor, protecția împotriva loopingului, precum și criteriile de selectare a cuvintelor cheie sunt determinate de algoritmii motorului de căutare.
De asemenea, multe motoare de căutare oferă utilizatorului posibilitatea de a adăuga site-ul la coadă pentru indexare. De obicei, accelerează în mod semnificativ indexarea site-ului, iar în cazurile în care nu există legături externe care să conducă la site, în general este singura posibilitate de a-și declara existența.
Limitați indexarea site-ului utilizând un fișier robots.txt, dar unele motoare de căutare pot ignora prezența acestui fișier. Protecția completă împotriva indexării este asigurată de mecanisme care nu pot ocoli paianjenii. De obicei - prin stabilirea unei parole pe pagină sau prin completarea formularului de înregistrare înainte de a accesa conținutul paginii.
Codificăm crawlerul nostru, care va indexa paginile web și va pregăti un fișier, pentru importul ulterior în index, pe care îl va utiliza motorul de căutare.
Aici este un astfel de cod, nu ar trebui doar să scrie și să înțeleagă cum funcționează pentru a adăuga un cuplu mai multe jetoane la propria lui. De exemplu, adăugați mai multe fire pentru a procesa mai multe pagini într-un timp scurt. Am 2 fire: principală și procedura care este conectat direct la site-ul și citiți Metadescrierea tag-uri, cuvinte cheie, titlul + proprii (H1, H2, H3, H4, H5, H6, puternic, b, le, eu, și așa mai departe. d.)
Mai întâi deschideți Delphi, în noua formă am pus 3 butoane Buton, 1 ProgressBar, 2 etichete, 1 idHTTP
În coloana din stânga (TreeView) alege forma noastră, apoi în Object Inspector și deschideți fila Evenimente în cazul în care OnCreate - este creat dublu click pe meniul drop-down dreptul de a fi o procedură nouă, în care scrie Adresă URL: = TStringList.Create;
procedura TForm1.FormCreate (expeditor: TObject);
începe
dest: = TStringList.Create;
se încheie;
pentru Butonul1, la fel mergeți la OnClick și lipiți acest cod
procedura TForm1.Button1Click (expeditor: TObject);
începe
stop: = false;
Button1.Enabled: = false;
Button2.Enabled: = true;
createthread (zero, 128, @Execute, self, 0, t); // creați firul
se încheie;
Primul buton creează un fir
În același mod, vom face codul celui de-al doilea buton
procedura TForm1.Button2Click (expeditor: TObject);
începe
stop: = adevărat;
se încheie;
Acest cod oprește firul.
procedura TForm1.FormDestroy (expeditor: TObject);
începe
dest.Free;
se încheie;
Un buton care salvează un fișier text, care este o interogare în baza de date MySQL, importă datele indexate
procedura TForm1.Button3Click (expeditor: TObject);
începe
dest.SaveToFile ("base.txt");
se încheie;
Cel mai important lucru: inima robotului de căutare
procedura Executa (p: pointer);
var
listă: TStringList;
i: întreg;
s, d, k, t: șir;
începe
listă: = TStringList.Create;
list.LoadFromFile ("urls.txt");
dest.Clear;
Form1.Label1.Caption: = 'Info:' + inttostr (list.Count) + 'site-uri.';
Form1.ProgressBar1.Max: = list.Count;
pentru i: = 0 la listă.Count-1 face
încerca
dacă se oprește apoi se rupe;
s: = Form1.IdHTTP1.Get (list.Strings [i]);
Form1.ProgressBar1.Poziție: = i + 1;
DeleteLineBreak (e);
Extract (i);
t: = GetTitle (uri);
ExtractMeta (e);
d: = GetMetaData ("descriere", s); // apelați funcția GetMetaData
k: = GetMetaData ("cuvinte cheie", s); // apelați funcția GetMetaData
dest.Add ("INSERT INTO base" (url, titlu, descriere, cuvinte cheie) VALUES ("+ list.Strings [i] +" "+ '') „); // Pregătește fișierul de import
cu excepția
Form1.ProgressBar1.Poziție: = i + 1;
Continuă;
se încheie;
list.Free;
Form1.ProgressBar1.Position: = 0;
Form1.Button2.Enabled: = false;
Form1.Button1.Enabled: = true;
ExitThread (0);
se încheie;
Procedura pentru conectarea la o pagină web, mai degrabă după ce a început serverul HTML-cod și „trage“ din valoarea de descriere tag-ul, titlul, cuvintele cheie.
Următoarea procedură este DeleteLineBreaks. scrie comanda html într-o singură linie pentru comoditate.
procedura DeleteLineBreaks (var src: string);
var
html: TStringList;
i: întreg;
începe
html: = TStringList.Create;
html.Text: = src;
src: = '';
pentru i: = 0 la html.Count-1 face
src: = src + html.Strings [i];
html.Free;
se încheie;
Deoarece etichetele noastre sunt în etichete
lăsăm doar conținutul lor.Funcția ia numele paginii web, adică valori între etichete
Lăsăm doar etichetele meta.
Funcția ia valorile etichetelor de descriere și a cuvintelor cheie, în funcție de atributul pe care a fost lansat-o.
Asta e tot! Robotul nostru de căutare este scris. Acesta va folosi urls.txt ca bază URL a paginilor web. Iar fișierul text.txt creat va fi folosit pentru a fi importat în index.
1 parte a lecției "Efectuarea motorului de căutare: motorul de căutare al interfeței Web (Retriever: Continued)"