Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
ВнизПоиск в HTML Найти похожие ветки
← →
oens (2003-12-03 15:34) [0]Господа.
Как найти все ссылки в html документе и вывести их
в FileListBox1?
← →
Darrin (2003-12-03 15:38) [1]парсишь документ на предмет наличия текста "href=", то что после него и есть ссылка
← →
Ihor Osov'yak (2003-12-03 15:46) [2]смотреть mshtml.pas
Подробности - в мсдн.
Можешь еще поискать "Использование функциональности IE" на Королевстве Делфи..
← →
oens (2003-12-03 15:57) [3]Господа, если можно подробнее, я с этой темой впервые работаю.
← →
TUser (2003-12-03 17:04) [4]Вот только что писал
procedure TForm1.JvHTButton1Click(Sender: TObject);
var f,fr,fh:textfile; s,s1:string; count, i:integer;
stre:TMemoryStream; mem:PChar; res:widestring; fl:boolean;
begin
count:=0;
assignFile(f,"C:\evgeniy\pdb\guide\download\toc.txt");
reset(f);
assignfile(fr,"C:\evgeniy\pdb\guide\download\urls");
rewrite(fr);
assignFile(fh,"C:\evgeniy\pdb\guide\download\toc.html");
rewrite(fh);
while not eof(f) do begin
readln(f,s);
if pos("<A href=" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/part",s)=1 then begin
s1:=" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/part"+copy(s,length("<A href=" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/part")+1,20);
i:=pos("" tar",s1);
if i=0 then i:=pos("" tar",s1);
// showMessage(s1+#13+inttostr(i)+" of "+inttostr(length(s1)));
delete(s1,i,length(s1)-i+1);
writeln(fr,s1);
delete(s,9,length(" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/"));
end;
writeln (fh,s);
end;
closefile(f);
closefile(fr);
closefile(fh);
assignfile(f,"C:\evgeniy\pdb\guide\download\urls");
reset(f);
progressbar1.Min:=0;
progressbar1.Max:=count;
progressbar1.Position:=0;
while not eof(f) do begin
readln(f,s);
label1.Caption:="processing "+s;
stre:=TMemorystream.Create;
httpcli1.URL:=s;
httpcli1.Proxy:="";
httpcli1.ProxyPort:="80";
httpcli1.RcvdStream:=stre;
httpcli1.Get;
mem:=stre.Memory;
memo1.Lines.Text:=res;
i:=1; res:=widestring(mem);
while i<length(res) do {begin
showmessage(res[i]+" = "+inttostr(ord(res[i])));
inc(i);
end; }
if (res[i]=#13) or (res[i]=#10) then
delete(res,i,1)
else inc(i);
i:=1; fl:=true;
while (i<length(res)+1) and fl do
if (res[i]="<") and (res[i+1]="A") and (res[i+2]=" ") then begin
insert(#13,res,i);
i:=i+3; end
else
if copy(res,i,7)="</html>" then
i:=length(res)+1
else inc(i);
mem:=PChar(res);
i:=1; s1:="";
i:=pos(".html",s);
assignfile(fh,"C:\evgeniy\pdb\guide\download\"+copy(s,length(" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/")+1,i+len gth(".html")-length(" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/")));
rewrite(fh);
while i<length(res)+1 do begin
if copy(res,i,length("<A href=" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/part"))="<A href=" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/" then begin
write(fh, "<A href=""); inc (i,length("<A href=" http://www.rcsb.org/pdb/docs/format/pdbguide2.2/part"));
end else begin
write (fh,res[i]); inc (i);
end;
end;
closefile (fh);
stre.Free;
progressbar1.Position:=progressbar1.Position+1;
end;
closefile(f);
Глюки есть, но для моих утилитарных целей (скачка некоторого количества страниц) прокатило. Для использования в серьезном проекте надо немного поотлаживать, что несложно. Только учти, что в данном случае я точно знал, как выглядят ссылки на этом сайте. Если же это неизвестно, то придется писать свой маленький парсер, учитывая, что возможно существование например, такой ссылки <a name=... target=... href=...>. Можно использовать готовые парсеры.
← →
TUser (2003-12-03 17:06) [5]Да, совсем забыл. Я предвартельно исходный файл отдельной прогой изменил - убрал все #13 и #10, а потом вставил по #13 перед каждой ссылкой.
← →
хамло (2003-12-03 17:19) [6]> смотреть mshtml.pas
правильный ответ!
← →
lahtak (2003-12-03 17:36) [7]Вот готовая процедура (c) Larsen www.euromind.com
procedure GetAnchorList(Ic: IHTMLElementCollection; Anchorlist: TStrings);
var
Anchor: IHTMLAnchorElement;
Disp: IDispatch;
x: Integer;
begin
if IC <> nil then begin
for x := 0 to IC.length - 1 do begin
Disp := IC.item(x, 0);
if SUCCEEDED(Disp.QueryInterface(IHTMLAnchorElement, Anchor))
and (anchor.href <> "")
then Anchorlist.add(Anchor.href);
end;
end;
end;
← →
хамло (2003-12-03 17:52) [8]2 lahtak
а откуда береться "Ic: IHTMLElementCollection" и что такое "IHTMLAnchorElement" история умалчивает? ))
← →
lahtak (2003-12-03 22:07) [9]хамло (03.12.03 17:19) [6] > смотреть mshtml.pas
:)
А если серьезно IHTMLAnchorElement - это и есть ссылка в широком
смысле , IHTMLElementCollection берется из
Doc : iHTMLDocument2;
ic:=Doc.get_all;
а документ берется например из браузера , а в полном примере
Ларсена вообще откуда хочешь.
← →
oens (2003-12-04 08:18) [10]Спаибо. Всем.
Эд.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.12.16;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.009 c