Форум: "Сети";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
ВнизСнова вопрос по извлечению текста из сайта Найти похожие ветки
← →
Руль (2002-08-27 01:41) [0]Извините что опять задаю тот-же вопрос но на него ответил один человек и то я ничго не понял из того что он написал. Если можно ссылку на инфо по Субдж.
← →
Kornet (2002-08-27 07:37) [1]С помощью THTTP берёшь страницу и начинаешь производить с ним строковые операции. Тут полёт фантазии может быть ограничен только твоей фантазией: парсинг, поиск и вырезание и так далее...
← →
Song (2002-08-27 08:22) [2]Скачай страницу на диск и делай с ней чего хочешь.
← →
Ihor Osov'yak (2002-08-27 17:51) [3]2 руль - если мне не изменяет память - один чел - то я.
инфо www.users.bit.te.ua\osi - (koi8) - там ссылка на статью.
Читаешь про парсинг, там также есть пример получения IHtmlElement от тега. Так вот, имя тега даешь body - а далее по тексту ... СориЮ готового фрагмента пока не дам - я на чужих територияХ. Разьве что вечерком из дому ...
Далее - IHtmlElement.get_innerText ...
Когда справишся с однофреймовым док - поговорим о многофреймовых
← →
Руль (2002-08-27 23:47) [4]2Kornet&2Song
Именно это я и сделал, но хотелось более цивилизовано :)
2Ihor Osov"yak У меня эта ссылка не работает, не можешь мне подсказать что такое парсинг и где ещё можно по данному сабджу найти инфо (горит проект)
Всем огромное спасибо что отозвались !!!!!
← →
Ihor Osov'yak (2002-08-28 00:23) [5]2 Руль
http://delphi.vitpc.com/mastering/tweb.htm
Фрагмент кода через несколько минут .....
2Kornet&2Song - ну, енто, немножко геморно... Тем более, есть возможность плодами трудов MS воспользоватся ...
← →
Ihor Osov'yak (2002-08-28 00:53) [6]Фрагмент кода. Он проверяет, есть ли на страничке фраза с учетом фреймов. Метод проверки - ищем подстроку в текстовом представлении странички (это тебе нужно - как я говорил раньше - getInnerText). Чего здесь не решено - если фрейм на другом сервере,чем основной документ - то через границу фрейма єтим способом не перепрыгнуть (ограничение парсера от MS по соображениям секюрити). Тогда нужно ловить каждый фрейм к примеру в OnDocumentComplete - но это снова отдельная тема.
Итак, код (немножко неряшлив и запутан, не обезсудь - писал в очередной загонке + рекурсивный обход фреймов универсальной процедурой - этим и обьясняется, почему у меня типизованый указатель приводится к интеджер при передачи рекурсивному обработчику).
Да, если не нужно обработки фреймов - весь код можно свести к четырем - пяти строчкам ....
Еще - если полностью копируешь текст - учти - lowerCase кажись для кирилицы не работает ( я то лазил по англ. сайтам)
type
pdataFor_fGetLinkOneFrame = ^dataFor_fGetLinkOneFrame;
dataFor_fGetLinkOneFrame = record
pStr : PString;
iElem:IHtmlElement;
end;
function fGetLinkOneFrame(iDoc:IHtmlDocument2; addPrm:integer):boolean;
var
ov:OleVariant;
iDisp: IDispatch;
iColl:IHTMLElementCollection;
iElement:IHTMLElement;
i:integer;
subStr:string;
begin
result := false;
if addPrm=0 then Exit;
if not assigned(iDoc) then Exit;
subStr := lowercase(pdataFor_fGetLinkOneFrame(addPrm)^.pStr^);
ov := "A";
IDisp:=iDoc.all.tags(ov);
if assigned(IDisp) then begin
IDisp.QueryInterface(IHTMLElementCollection,iColl);
if assigned(iColl) then begin
for i:=1 to iColl.Get_length do begin
iDisp:=iColl.item(pred(i),0);
iDisp.QueryInterface(IHTMLElement,iElement);
if assigned(iElement) then begin
if Pos(lowercase(SubStr),lowercase(iElement.InnerText))>0
then begin
result := true;
pdataFor_fGetLinkOneFrame(addPrm)^.iElem := iElement;
Exit;
end
end;
end;
end;
end;
end;
function FinderFirstCondForHtmlDocWithFrames(iDoc:IHtmlDocument2;
addPrm:integer;
aDoer:TOneStepSearchCondForHtmlDocWithFrames):boolean;
{ The procedure aDoer will be caused for each IHtmlDocument2, beginning
from main and finishing any level of frames
while aDoer will return false;
}
var frames:IHTMLFramesCollection2;
i:integer;
ov1:OleVariant;
iDisp:IDispatch;
IWindow2:IHTMLWindow2;
begin
result := false;
if not assigned(aDoer) then Exit;
result:=aDoer(iDoc,addPrm);
if result then Exit;
frames:=iDoc.frames;
if not assigned(frames) then exit;
if frames.length=0 then exit;
//i:= frames.length;
//Writeln("i=",IntToStr(i));
for i:=1 to frames.length do begin
ov1:=i-1;
try
iDisp:=frames.item(ov1);
iDisp.QueryInterface(IHTMLWindow2,IWindow2);
if assigned(IWindow2)
then begin
result := false;
try
if assigned(IWindow2.document)
then
result := FinderFirstCondForHtmlDocWithFrames(IWindow2.document,addPrm,aDoer);
except
end;
if result then exit;
end;
except
{ ShowMessage("Find error !!!");}
end;
end;
end;
function GetBodyWithSubstr(pDisp: IDispatch; const subStr:string):IHtmlElement;
var iDoc:IHtmlDocument2;
var data:dataFor_fGetLinkOneFrame;
begin
result := nil;
iDoc:=(pDisp as IWebBrowser2).Document as IHtmlDocument2;
if not assigned(iDoc) then Exit;
fillChar(data,sizeof(data),0);
data.pStr := @subStr;
if FinderFirstCondForHtmlDocWithFrames(iDoc,integer(@Data),fGetBobyWitshSbstrOneFrame)
then begin
result := data.iElem;
data.iElem := nil;
end;
data.pStr := nil;
end;
← →
Kornet (2002-08-28 06:51) [7]2Ihor Osov"yak:
>ну, енто, немножко геморно... Тем более, есть возможность плодами трудов MS воспользоватся ...
Это то конечно, в принципе всё зависит от конкретики задачи, мне хватает 5 строчек кода, что бы вырезать наример финансовые показатели с сайтов... Но согласен, с MS парсером красивее и веселее. :)
← →
Ghost. (2002-08-28 09:17) [8]Да все правильно IE это такойже ОЛе бьект и с ним можно очень удобно работать и искать строки
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2002.10.28;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c