Delphi урок - учимся парсить ссылки на странице

Опубиковано: 17.11.2011 г., автор: , просмотров: 26185

В этом небольшом уроке я покажу вам как можно легко парсить все ссылки на web странице.
Итак, открываем Delphi и создаем новый проект.
Лично я для данного урока использовал Delphi 2010,
Поэтому, если у вас на компьютере установлена другая версия, возможно придется самостоятельно немного поправить код.
Для начала в раздел uses подключаем следующие библиотеки:

mshtml, ActiveX, COMObj, IdHTTP, idURI;

Создадим новую процедуру при помощи которой наша программа будет парсить ссылки. После ключевого слова public напишем следующий код:

procedure ExtractLinks (const url: String; const strings: TStrings) ;

Далее нажимаем уже знакомую нам комбинацию клавиш CTRL+Shift+C в результате чего Delphi сгенерирует нам шаблон для будущей процедуры.

Объявляем локальные переменные

var
iDoc : IHTMLDocument2;
strHTML : string;
v : Variant;
x : integer;
links : OleVariant;
docURL : string;
URI : TidURI;
aHref : string;
idHTTP : TidHTTP;

В теле процедуры тоесть между Begin ... end пишем следующий код:

strings.Clear;
URI := TidURI.Create(url) ;
try
docURL := 'http://' + URI.Host;
if URI.Path <> '/' then docURL := docURL + URI.Path;
finally
URI.Free;
end;
iDoc := CreateComObject(Class_HTMLDOcument) as IHTMLDocument2;
try
iDoc.designMode := 'on';
while iDoc.readyState <> 'complete' do Application.ProcessMessages;
v := VarArrayCreate([0,0],VarVariant) ;
idHTTP := TidHTTP.Create(nil) ;
try
strHTML := idHTTP.Get(url) ;
finally
idHTTP.Free;
end;
v[0]:= strHTML;
iDoc.write(PSafeArray(System.TVarData(v).VArray)) ;
iDoc.designMode := 'off';
while iDoc.readyState<>'complete' do Application.ProcessMessages;
links := iDoc.all.tags('A') ;
if links.Length > 0 then
begin for x := 0 to -1 + links.Length do
begin
aHref := links.Item(x).href;
if (aHref[1] = '/') then
aHref := docURL + aHref
else if Pos('about:', aHref) = 1
then aHref := docURL + Copy(aHref, 7, Length(aHref)) ;
strings.Add(aHref) ;
end;
end;
finally
iDoc := nil;
end;

Так с основными приготовлениями мы закончили, и очень скоро наш робот игрушка покажет себя в действии. А сейчас давайте кинем на форму 3 компонента с закладки Standard: Edit, Button, Memo

Если кто не понял, в компонент Edit мы будем вводить нужный URL адрес, а после нажатия на кнопку в memo будут отображаться все ссылки с указанной Web страницы.

Напоследок, создадим обработчик событий OnClick на кнопке, в котором вызовем нашу процедуру с нужными параметрами (между begin ... end пишем)

ExtractLinks(Edit1.Text, memo1.Lines);

Вот в принципе и все запускаем и компилируем проект.

 

P.S. Хотите вперед всех остальных посетителей сайта получать свежие Видео уроки, Аудио подкасты, статьи по Delphi.
Участвовать в конкурсах и постепенно вливаться в нашу команду ?!
Тогда прямо сейчас подписывайтесь на бесплатную мультимедийную рассылку сайта delphiexpert.ru
Нас уже больше чем 10000 человек ! Подписаться



Похожие материалы

Последние из рубрики

samurau 12 Фев 2013 в 00:00 #
CodeGear™ Delphi® 2009 Version 12.0.3170.16989
Выдает ошибку "Unknown protocol".
Что поменять?
admin 20 Ноя 2012 в 00:00 #
Я лошара, пасаны.
AleX 07 Ноя 2012 в 00:00 #
В WebBrowser загружена страница с N количеством фреймов и в одном из них есть такой код:
<BUTTON class=UserBattleRefresh title=Обновить style="POSITION: relative" action="refresh2"> </BUTTON>
как програмно нажать кнопку испробывал кучу вариатов но так сам и не смог сделать
Анатолий 06 Авг 2012 в 00:00 #
Socket Error # 10061

Connection refused.

такая ошибка. Что делать?
Евгений 21 Июл 2012 в 00:00 #
Хорошие статьи и исходники. Благодарю - много узнал полезного и эффективного.
Хотелось бы посмотреть на исходник (рабочий) почтовой программы позволяющей корректно принимать и отправлять почту со вложением.

Узнать о работе с API

ОтменитьДобавить комментарий