Часто требуется получить список всех ссылок, которые встречаются в некотором заданном html. Для решения этой задачи можно написать собственный парсер на Delphi или использовать регулярные выражения при помощи, например, компонента TRegExp. Однако все эти способы достаточно трудоемкие и не гарантирующие от ошибок в самый ответственный момент.
Ниже предлагается простая и эффективная функция, позволяющая получить список ссылок из текста с использованием
MSHTML. Результат сохраняется в заданном экземпляре
TStringList.
uses Classes, MSHTML, variants, activex;
procedure GetLinksFromHTML(Text: string; List: TStringList);
var s,link: string;
i: integer;
Document: IHTMLDocument2;
varr: OleVariant;
Collection: IHTMLElementCollection;
Element: IHtmlElement;
begin
List.Clear;
Document := coHTMLDocument.Create as IHTMLDocument2;
varr := VarArrayCreate([0,0], VarVariant);
varr[0] := Text;
Document.Write(PSafeArray(TVarData(varr).VArray));
Collection := Document.All.Tags('A') as IHTMLElementCollection;
For i:=0 to Collection.length-1 do
begin
Element := Collection.Item(i,0) as IHtmlElement;
link:=Element.getAttribute('href',0);
if (Pos('http:',link)>0) or (Pos('https:',link)>0) then List.Add(link);
end;
end;
В приведенной выше функции делается предположение, что требуются только те ссылки, которые содержат в себе в любом месте http или https, но вы можете доработать эту логику под собственные нужды, например, исключив из списка ссылки, начинающиеся с about или вырезать из текста полученной ссылки только ту часть, которая начинается с http или https.
Смотрите также:
Оставьте свой комментарий
Вы должны быть авторизированны, чтобы оставить комментарий.