Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как вытащить все сылки из HTML страницы? [D5, D6, WinME]


Michael2 ©   (2002-07-26 18:05:00) 

Есть HTML страница. Необходимо получить все ссылки имеющиеся на ней (на другие страницы, на картинки, на css и т.п.), чтобы потом можно было все это дело выкачать и просматривать страницу с диска. Я так понимаю, что нужен какой-то HTML анализатор. Никакого нормального не нашел. Подскажите что-нибудь.


int64   (2002-11-11 20:07:00) [1]

Строка
if (href <> "") then
разумеется, лишняя.


int64   (2002-11-11 19:53:00) [2]

Юрий (11.11.02 19:06)
Вот так парсерим, например, картинки:

procedure TForm1.Button1Click(Sender: TObject);
var
Coll: IHtmlElementCollection;
V: OleVariant;
i: Integer;
IE: IDispatch;
begin
IE := CreateOleObject("InternetExplorer.Application");
With (IE as IWebBrowser),(IE as IWebBrowser2) do
begin
Visible := false;
Navigate(" http://delphi.mastak.ru",v,v,v,v);
while Busy do sleep(0);
Coll:= (document as IhtmlDocument2).all.tags("img")
as IHtmlElementCollection;

for i:=0 to Coll.length-1 do
with (Coll.item(i,v) as IHTMLImgElement) do
if (href <> "") then
begin
Memo1.Lines.add("src: "+src);
Memo1.Lines.add("protocol: "+protocol);
Memo1.Lines.add("nameProp: "+nameProp);
Memo1.Lines.add("");
end;
Quit;
end;
end;


Можно, конечно, и руками. Только стоит ли?


Юрий   (2002-11-11 19:06:00) [3]

Упс, не полностью описал ситуацию - надо зайти на строго определенный сайт, и уже оттуда получить ссылки.


Юрий   (2002-11-11 19:02:00) [4]

Разрешите вмешаться в разговор?
Если мне надо не показать страницу в окне, а получить только ссылки на файлы картинок, то каким путем идти?


Kornet   (2002-10-31 12:39:00) [5]

Хочется поучаствовать в споре. :) Ihor Osov"yak, ты зря наезжаешь на Wonder, надо учится самому делать, своими ручками, например используя регулярные выражения, а то накачают себе "кампанент"... Код использующий POSIX регулярные выражения и вырезающие теги <a> у меня занимал одну строку...


Дмитрий К.К.   (2002-10-31 10:08:00) [6]

Фастнет.


PONTIY   (2002-10-31 08:21:00) [7]

Извините за возможный оффтопик, но какими именно компонентами можно взять с сайта html-код?


Undert   (2002-09-23 00:06:00) [8]

ООО... ну вы и отморозки ... надо использовать TWEBProducer - Он всё умеет... С помощью него можно темлайты лабать...


Matandra   (2002-09-22 19:53:00) [9]

TWEBBrowser нужен...Он все умеет. в форумах все ответы на вопросы выше есть...Если кому что надо - могу прислать пример...
Ссылки берутся так
Document.all.tags("A").QueryInterfac(IID_IHTMLElementCollection,HTMLTags);
for i := 0 to HTMLTags.length - 1 do
begin
HTMLTags.item(i,0).QueryInterface(IID_IHTMLElement,HTMLElement);
end;
Document - свойство WEBBrowser...


maxi-mov   (2002-09-22 14:34:00) [10]

2 WONDER and DELPHER_GRAY - можно конечно написать и ручками, никто не спорит. Но все не так просто как вам кажется: между "<a href=" и "</a>" может быть много "лишних" тегов которые тоже надо знать и убирать, плюс возможны лишние пробелы, концы 8) строк и т.п.

ЗЫ - Может кто знает нужный компонент для этих целей? Подскажите...


Ihor Osov'yak   (2002-09-16 12:14:00) [11]

2 delpher_gray - человек спрашивал, на другие страницы, на картинки, на css и т.п. Следовательно одним a href= не обойтись.... А вот, когда сделаете то, что чел хочет "ручками" с юзанием того же mshtml.dll - вы сами убедитесь, что были не совсем правы.

2 Wonder (26.07.02 18:07) - аяяй, а еще Мастер.... Ну, как минимум очень спорное предложение (ваше)

2 int64 - полностью согласен.

ЗЫ - да, возникло подозрение, что человеку нужен телепорт. Или есть желание самому аналог сделать?


delpher_gray   (2002-09-16 11:21:00) [12]

Ну делфера !
Чё тут трудного то ????
Просто в TStringListкопируте HTML код, затем в коде ищите "<a href=", и копируете строку в stringот "<a href=до ближайшего "</a>"потом удаляете от строки 8 символов в начале строки, и в коце 4. Вот и всё решение проблемы...


maxi-mov   (2002-09-16 01:07:00) [13]

Установи ReGet (Менеджер закачки) после его установки в контекстном меню эксплорера появится строка "Список ссылок для ReGet" Нажимаешь и ReGet генерит тебе страницу с сылками
- бери, сохраняй, пользуйся.


kig   (2002-07-27 01:26:00) [14]

А чего искать? MSHTML не подходит? (Или тот же IE, как справедливо заметил int64). А получить коллекцию тегов <A>, <IMG> и т.п. - полно примеров в MSDN.

Если надо в "слепую" - то сюда
http://www.euromind.com/iedelphi/uilessparser.htm


int64   (2002-07-26 23:49:00) [15]

Не удобно. Уже многие ломали хребет на этом. :)

Есть полно парсеров, надо только поискать.

Или переваривать ресурсы документа через интерфейсы IE.


Wonder   (2002-07-26 18:07:00) [16]

Ручками писать.
Качать html-код страницы и разбирать на предмет наличия тегов <a href=...></a>


Наверх

Титульная страница Поиск, карта сайта Написать письмо