Форум: "Основная";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];
ВнизЕсть html код. Как из него выдрать ссылки? Найти похожие ветки
← →
Феликс (2002-07-07 11:33) [0]Хотя бы в каком направление копать? А совсем хороше бы было если бы исходник кто-нибудь дал посмотреть!
← →
Shrek (2002-07-07 12:33) [1]Я впринципе не спец но я бы зледал это так:
Берёш строку, потом в этой строке ищеш текст. "href"
X := Pos("href", "Твоя строка").
Потом отсюда и копаеш.
P.S. Не осудите срого если что не так но я бы так и сделал.
← →
MBo (2002-07-07 12:35) [2]по простому - использовать Pos, искать href, < > "
Можно попробовать и регулярные выражения (статья есть на delphi.vitpc.com)
← →
Коля (2002-07-07 12:50) [3]не совсем так. в html ссылки пишутся вот так:
href=" http://www.rambler.ru"
а вот такой код по идее должен найти эти ссылки:
i:= Pos("href", Text) + 7
while Text[i] <> """ do
begin
link:= link + text[i]
i:=i+1;
end;
так программа запишет только первую ссылку, сделай цикл чтобы она нашла все.
← →
Shrek (2002-07-07 12:57) [4]> Коля
Ну а если кто поставит пробелы типа
href = " http://www.rambler.ru"
← →
Феликс (2002-07-07 13:24) [5]Эксперименты с выше указанным кодом дали отрицательный результат! Не первую, не вторую не находит! Дает ошибку! Мне тоже кажется, что pos,copy и.т.д в данном случае единственные варианты! Осталось самое простое: оформить в виде кода. Но как?
← →
Shrek (2002-07-07 13:50) [6]Могу помочь. Но я тебе а ты мне.
Я тебе деляю пример с Pos и Copy с розяснением.
Аты посмотреш мой вопрос о ClientSocketError.
Если согласень давай на мыло.
← →
Стою на базаре, семечки продаю (2002-07-07 15:05) [7]Вот эт я понимаю рыночные отношения!
← →
Коля (2002-07-07 15:07) [8]Вот! теперь должно работать, правдо код довольно запутанный... Читаешь файл в text
var
i,ii:integer;
link:string; text:WideString;
exist:boolean;
begin
while Pos("href", text) > 0 do
begin
i:=Pos("href", text);
while text[i] <> """ do
i:=i+1;
Delete(text,0,i);
i:=1;
while text[i] <> """ do
begin
link:=link+text[i];
i:=i+1;
end;
//записываешь линк куда тебе надо
link:="";
end;
end;
← →
Коля (2002-07-07 15:09) [9]оппа этот
exist:boolean;
вообще из другой истории...
← →
Anatoly Podgoretsky (2002-07-07 15:40) [10]Да а если кавычек не будет, и таких да много
В Дельфи есть специальная вещь "TWebBrouser" если его освоить, то эта проблема решается в нем уже на системном уровне
← →
Феликс (2002-07-07 15:40) [11]var
i,ii:integer;
link:string; text:WideString;
begin
text:=memo1.Lines.Text;
while Pos("href",text) > 0 do
begin
i:=Pos("href", text);
while text[i] <> """ do
i:=i+1;
Delete(text,0,i);
i:=1;
while text[i] <> """ do
begin
link:=link+text[i];
i:=i+1;
end;
listbox1.items.add(link);
//записываешь линк куда тебе надо
link:="";
end;
end;
в memo1 находится html код! Так вот! Данный код! Зверски записывает в листбох первую строку этого самого html кода! Во как! Что делать?
← →
Феликс (2002-07-07 15:43) [12]> Коля
У тебя у самого код то работает?
← →
Коля (2002-07-07 16:05) [13]Извини! я описался- не Delete(text,0,i); а Delete(text,1,i);
← →
Феликс (2002-07-07 16:26) [14]2 Коля
Земной тебе поклон, Коля! Код работает лучше чем моя потовыделительная система (а потовыделительная система у меня зашибись тьфу-тьфу-тьфу)! Еще раз Спасибо и Большой тебе респект за труды, трату времени, и помощь моей скромной персоне!
← →
int64 (2002-07-07 18:59) [15]Вам же говорят, что линки не всегда в кавычках, да ещё в двойных.
Тем более, что html код может создаваться динамически (через document.write, например). А о фреёмах я вообще не говорю.
Вот как через IE:
procedure TForm1.Button1Click(Sender: TObject);
var
Coll: IHtmlElementCollection;
V: OleVariant;
i: Integer;
IE: IDispatch;
begin
if InitProc <> nil then TProcedure(InitProc);
IE := CreateOleObject("InternetExplorer.Application");
With (IE as IWebBrowser),(IE as IWebBrowser2) do
begin
Visible := false;
Navigate("c:\temp\index.html",v,v,v,v);
while Busy do sleep(0);
Coll:= (document as IhtmlDocument2).all.tags("a")
as IHtmlElementCollection;
end;
for i:=0 to Coll.length-1 do
with (Coll.item(i,v) as IHTMLAnchorElement) do
if (href <> "") then
begin
Memo1.Lines.add("href: "+href);
Memo1.Lines.add("host: "+host);
Memo1.Lines.add("hostname: "+hostname);
Memo1.Lines.add("port: "+port);
Memo1.Lines.add("protocol: "+protocol);
Memo1.Lines.add("nameProp: "+nameProp);
Memo1.Lines.add("pathname: "+pathname);
Memo1.Lines.add("");
end;
end;
Если доработать, будет и во фреймах искать.
Дерзай.
← →
Феликс (2002-07-07 21:17) [16]IE := CreateOleObject("InternetExplorer.Application");
Говорит Missing operator or semilicon! Вот так вот.
← →
Феликс (2002-07-07 23:01) [17]Ага! Разобрался. Нужно было добавить Comobj в uses. Только код по прежнему не работает!
if InitProc <> nil then TProcedure(InitProc);
IE:=CreateOleObject("InternetExplorer.Application");
With (IE as IWebBrowser),(IE as IWebBrowser2) do
begin
Visible := false;
Navigate("temp.htm",v,v,v,v);
while Busy do sleep(0);
Coll:= (document as IhtmlDocument2).all.tags("a")
as IHtmlElementCollection;
end;
for i:=0 to Coll.length-1 do
with (Coll.item(i,v) as IHTMLAnchorElement) do
if (href <> "") then
begin
Memo1.Lines.add("href: "+href);
Memo1.Lines.add("host: "+host);
Memo1.Lines.add("hostname: "+hostname);
Memo1.Lines.add("port: "+port);
Memo1.Lines.add("protocol: "+protocol);
Memo1.Lines.add("nameProp: "+nameProp);
Memo1.Lines.add("pathname: "+pathname);
Memo1.Lines.add("");
end;
end;
Coll:= (document as IhtmlDocument2).all.tags("a") <- Говорит неподнаная ошибка!
← →
Феликс (2002-07-07 23:03) [18]Это опять я! Вроде бы разобрался! Спасибо int64. Способ хороший, но есть еще лучше. В любом случае, спасибо этот способ тоже очень не плохой!
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.07.18;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.008 c