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

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

    В этом небольшом уроке я покажу вам как можно легко парсить все ссылки на 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 человек ! Подписаться



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

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

    DwightOwene 15 Apr 2018 в 02:17 #
    заказать продвижение сайта логин в скайпе SEO PRO1
    samurau 12 Feb 2013 в 00:00 #
    CodeGear™ Delphi® 2009 Version 12.0.3170.16989
    Выдает ошибку "Unknown protocol".
    Что поменять?
    admin 20 Nov 2012 в 00:00 #
    Я лошара, пасаны.
    AleX 07 Nov 2012 в 00:00 #
    В WebBrowser загружена страница с N количеством фреймов и в одном из них есть такой код:

    как програмно нажать кнопку испробывал кучу вариатов но так сам и не смог сделать
    Анатолий 06 Aug 2012 в 00:00 #
    Socket Error # 10061

    Connection refused.

    такая ошибка. Что делать?

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