Создание анкоров из заголовков страниц
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.
Скачать файлы проекта





Комментарии пользователей
Комментариев пока нет.
Оставить свой комментарий