В данный статье рассмотрим создание анкоров, на основе заголовков страниц сайта. Данные о страницах будем брать из файла sitemap.xml. Для начала создадим консольное приложение в среде Delphi. Воспользуемся функцией QueryHttps, которая была подробно описана в статье "Парсинг текста", а так же на основе класса RegExpr создадим несколько функций:

function ereg(p,t: string): boolean;
  var
  r: TRegExpr;
  begin
    r:=TRegExpr.Create;
    r.ModifierM:=true; //Включаем multiline
    r.ModifierI:=true; //Игнорирование регистра
      try
        r.Expression:=p;
        result:=r.Exec(t);
      finally
        r.Free;
      end;
  end;
 

Результатом функции будет логическое значение, говорящее о нахождении шаблона "p" в тесте "t"

 function _regexp_value(p,t: string): string;
  var
  r: TRegExpr;
  i: integer;
  begin
    result:='';
    r:=TRegExpr.Create;
    r.ModifierI:=true;
      try
        r.Expression:=p;
        if(r.Exec(t))then
         for i:=0 to r.SubExprMatchCount-1 do
          begin
            result:=result+r.Match[i+1];
          end;
      finally
        r.Free;
      end;
  end;
 

Функция ищет совпадения в тексте, и возвращает склеенную строку из группировок.
Для сохранения результата работы в файл создадим процедуру ToFile:

procedure ToFile(str, filename: string);
var
  f: TextFile;
begin
  AssignFile(f,filename);
  Append(f);
  Writeln(f,str);
  CloseFile(f);
end;
 

Так как данные нужно брать из файла xml, воспользуемся стандартными средствами среды для работы с xml. Объявим переменные xml и Node:

xml: IXMLDocument;
Node: IXMLNode;
 

Процесс создания можно описать очень просто:
- Узнаём адрес файла sitemap;
- Проходим по дереву файла, согласно стандарту sitemap ссылка должна храниться в узле "loc";
- Скачиваем найденную страницу;
- Сверяем текст страницы с шаблоном;
- Сохраняем результат в файл.

Так как приложение консольное, мы должны вручную вызвать процедуру инициализации Com - CoInitialize;
Далее рассмотрим пример реализации на сайте hello-world.com.ua

const
url='http://hello-world.com.ua/sitemap.xml';
//Объявим константу, хранящую адрес sitemap

var
Reg: string;
// регулярное выражение
xml: IXMLDocument;
// документ xml
Node: IXMLNode;
// узел
i: integer;
// переменная цикла, для перебора всех ссылок
bf: string;
// буфер для хранение страниц

begin
//
CoInitialize(nil); // инициализация
Reg:='<title>(.*?) - Программы для Seo.*?</title>';
// регулярное выражение, которое отсеивает уникальный заголовок страницы
FileClose(FileCreate('result.txt'));
// пересоздаём файл
//
  try
    xml:=TXMLDocument.Create(url); // скачиваем sitemap
    xml.Active:=true; // активируем документ для работы
    for i:=0 to xml.DocumentElement.ChildNodes.Count-1 do // перебираем все ветки дерева
      begin
        Node:=xml.DocumentElement.ChildNodes[i].ChildNodes.FindNode('loc');
    //находим  узер "loc"
        bf:=QueryHttps(Node.NodeValue);
    // так как значение узла - ссылка страницы, скачиваем её
          if ereg(reg,bf) then // сверяем с регулярным выражением
            begin
              ToFile('<a href="'
        +Node.NodeValue+'">'
        +_regexp_value(reg,bf)+'</a>',
        'result.txt');
        // Если совпадение найдено - сохраняем анкор в файл
            end;  
      end;
  finally
    xml:=nil;// уничтожаем документ
  end;

end.
 


Скачать файлы проекта