Робимо пошуковик пошуковий робот

Робимо пошуковик: Пошуковий робот

як зробити пошуковик?

як зробити пошуковий робот, павук, краулер, індексатор (spider, crawler) на Delphi?

Порядок обходу сторінок, частота візитів, захист від зациклення, а також критерії виділення ключових слів визначається алгоритмами пошукової машини.







Також багато пошукові системи надають користувачеві можливість самостійно додати сайт в чергу для індексування. Зазвичай це істотно прискорює індексування сайту, а у випадках, коли ніякі зовнішні посилання не ведуть на сайт, взагалі виявляється єдиною можливістю заявити про його існування.

Обмежити індексацію сайту можна за допомогою файлу robots.txt, проте деякі пошукові системи можуть ігнорувати наявність цього файлу. Повний захист від індексації забезпечується механізмами, обійти які поки павукам не під силу. Зазвичай - установкою пароля на сторінці, або вимогою заповнити реєстраційну форму перед тим, як отримати доступ до вмісту сторінки.

Кодима наш пошуковий робот, який буде індексувати веб-сторінки і готувати файл, для подальшого імпорту в індекс, яким пошуковик буде користуватися.

Вот такой вот код ми повинні не просто написати, а зрозуміти як він працює, щоб ще додати пару фішок для свого власного. Наприклад, додати ще кілька потоків для обробки більшої кількості сторінок за короткий час. У мене тут 2 потоку: основний і процедура яка безпосередньо підключається до сайту і Новомосковскет мета теги description, keywords, title + ваші власні варіанти (h1, h2, h3, h4, h5, h6, strong, b, em, i і т. д.)

Спочатку відкриваємо Delphi, в новій формі ставимо 3 кнопки Button, 1 ProgressBar, 2 Label'а, 1 idHTTP

У колонці зліва (TreeView) вибираємо нашу форму, далі в інспекторові об'єктів відкриваємо вкладку Events і там де OnCreate - подвійне клацання на меню, що випадає праворуч, повинна створиться нова процедура в якому пишемо dest: = TStringList.Create;

procedure TForm1.FormCreate (Sender: TObject);






begin
dest: = TStringList.Create;
end;

для Button1 таким же способом заходимо в OnClick і вставляємо цей код

procedure TForm1.Button1Click (Sender: TObject);
begin
stop: = false;
Button1.Enabled: = false;
Button2.Enabled: = true;
createthread (nil, 128, @Execute, self, 0, t); // створення потоку
end;

Перша кнопка створює потік

таким же способом робимо код для другої кнопки

procedure TForm1.Button2Click (Sender: TObject);
begin
stop: = true;
end;

Цей код зупиняє потік.

procedure TForm1.FormDestroy (Sender: TObject);
begin
dest.Free;
end;

Кнопка зберігає текстовий файл, який і є запитом до бази даних MySQL - імпортує проіндексовані дані

procedure TForm1.Button3Click (Sender: TObject);
begin
dest.SaveToFile ( 'base.txt');
end;

Найголовніше: Серце пошукового робота

procedure Execute (p: pointer);
var
list: TStringList;
i: integer;
s, d, k, t: string;
begin
list: = TStringList.Create;
list.LoadFromFile ( 'urls.txt');
dest.Clear;
Form1.Label1.Caption: = 'Info:' + inttostr (list.Count) + 'sites.';
Form1.ProgressBar1.Max: = list.Count;
for i: = 0 to list.Count-1 do
try
if stop then break;
s: = Form1.IdHTTP1.Get (list.Strings [i]);
Form1.ProgressBar1.Position: = i + 1;
DeleteLineBreaks (s);
ExtractHead (s);
t: = GetTitle (s);
ExtractMeta (s);
d: = GetMetaData ( 'description', s); // викликає функція GetMetaData
k: = GetMetaData ( 'keywords', s); // викликає функція GetMetaData
dest.Add ( 'INSERT INTO base (url, title, description, keywords) VALUES ( "' + list.Strings [i] + '", "' + t + '", "' + d + '", "' + k + ' ");'); // готує файл імпорту
except
Form1.ProgressBar1.Position: = i + 1;
Continue;
end;
list.Free;
Form1.ProgressBar1.Position: = 0;
Form1.Button2.Enabled: = false;
Form1.Button1.Enabled: = true;
ExitThread (0);
end;

Процедура підключається до веб-сторінку, точніше бере у сервера html-код і "висмикувати" звідти значення тегів description, title, keywords.

Наступна процедура DeleteLineBreaks. вона записує html-код в один рядок для зручності.

procedure DeleteLineBreaks (var src: string);
var
html: TStringList;
i: integer;
begin
html: = TStringList.Create;
html.Text: = src;
src: = '';
for i: = 0 to html.Count-1 do
src: = src + html.Strings [i];
html.Free;
end;

Так як наші теги знаходяться в тегах ми залишаємо тільки їх вміст.

Функція бере ім'я веб-сторінки, тобто значення між тегами

Ми залишаємо тільки мета теги.

Функція бере значення тегів description і keywords, дивлячись з яким атрибутом вона була запущена.

От і все! Наш пошуковий робот написаний. Він буде використовувати urls.txt в якості бази урлов веб-сторінок. А створений текстовий файл base.txt буде використовуватися для імпорту в Індекс.

1 частина уроку "Робимо пошуковик: Веб інтерфейс пошуковика (Пошуковик: Продовження)"