![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как вытащить все сылки из 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>