1. Apache02.05.2025 at 5:29 PMот
Loading...
Loading...

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

Discussion in 'С/С++/Pascal/Delphi' started by MishaRed, 27.11.2013.

  1. MishaRed

    MishaRed

    Статус:
    Оффлайн
    Joined:
    02.06.13
    Messages:
    450
    Репутация:
    142 +/-
    В этом небольшом уроке я покажу вам как можно легко парсить все ссылки на 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);

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

    ИСТОЧНИК: ImbaCode.ru