Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.09;
Скачать: CL | DM;

Вниз

Как вытащить все сылки из HTML страницы?   Найти похожие ветки 

 
Michael2   (2002-07-26 18:05) [0]

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


 
Wonder ©   (2002-07-26 18:07) [1]

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


 
int64 ©   (2002-07-26 23:49) [2]

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

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

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


 
kig ©   (2002-07-27 01:26) [3]

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

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



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

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


 
delpher_gray ©   (2002-09-16 11:21) [5]

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


 
Ihor Osov'yak ©   (2002-09-16 12:14) [6]

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

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

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

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


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

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

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


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

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...


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

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


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

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


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

Фастнет.


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

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


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

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


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

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



 
int64 ©   (2002-11-11 19:53) [15]

Юрий (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;


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


 
int64 ©   (2002-11-11 20:07) [16]

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



Страницы: 1 вся ветка

Текущий архив: 2003.01.09;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.012 c
3-24790
Борис
2002-12-16 16:22
2003.01.09
Как в переменную загнать значение IB генератора


1-24855
Adam
2002-12-27 20:27
2003.01.09
Текущая директория


4-25136
Stainer
2002-11-19 16:47
2003.01.09
список процессов с полными путями


4-25146
chernoruk
2002-11-15 20:02
2003.01.09
cmd.exe


4-25137
Griffin
2002-11-18 22:37
2003.01.09
Передача сообщений от мыши другому приложению