Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C++ Builder > Html -> Txt (Как получить только текст страницы)


Автор: Alca 31.12.2006, 13:22
Html -> Txt (Как получить только текст страницы)

Автор: megabist 31.12.2006, 14:41
Тоесть текст без тегов или чего?
Если текст без тегов то я так понимаю нужна брать набор всех тегов и сравнивая с трафаретом удалять..

Автор: Alca 31.12.2006, 14:57
Текст, который виден на странице

Автор: megabist 31.12.2006, 15:45
в невидимом режиме открываешь через cppbrowser и считываешь показываемое.... покопай там функции

Автор: Alca 1.1.2007, 19:57
Код

#include <mshtml.h>

void __fastcall TfrmMain::doConvertHtmlToText(TCppWebBrowser *pCppWebBrowser, AnsiString asHtmlFilePath, AnsiString asTxtFilePath) {
    //загружаем страницу в pCppWebBrowser
    wchar_t URL[MAX_PATH];
    asHtmlFilePath.WideChar(URL, MAX_PATH);
    pCppWebBrowser->Navigate(URL, 0, NULL, NULL, NULL);

    //ждём окончания загрузки
    while (pCppWebBrowser->ReadyState < ::READYSTATE_INTERACTIVE/*pCppWebBrowser->Busy*/) {
        Application->ProcessMessages();
    }

    //грабим текст
    IHTMLDocument2 *pHTMLDocument = NULL;
    IHTMLElement *pElem = NULL;
    wchar_t *pText;

    if (SUCCEEDED(pCppWebBrowser->Document->QueryInterface(IID_IHTMLDocument2, (LPVOID*)&pHTMLDocument))) {
        pHTMLDocument->get_body(&pElem);
        pElem->get_innerText(&pText);
    }
    
    pHTMLDocument->Release();
    pElem->Release();

    //пишем текст pText
    TStringList* pList = new TStringList;
    pList->Text = pText;
    pList->SaveToFile(asTxtFilePath);
    delete pList;
}


//конвертим
doConvertHtmlToText(CppWebBrowser1, "Test.html", "Test.txt"); 

Автор: Syrex 1.11.2007, 15:30
А как сохранить страницу в формате HTML ?

Автор: JackYF 1.11.2007, 15:57
Цитата(Syrex @  1.11.2007,  15:30 Найти цитируемый пост)
А как сохранить страницу в формате HTML ? 

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

Автор: Syrex 1.11.2007, 16:08
А где тогда в предоставленном коде страница перекодируется?!

Добавлено через 7 минут и 23 секунды
Все. Нащел.
Заменить

pElem->get_innerText(&pText);

на

pElem->get_innerHTML(&pText);

Автор: Cheater 3.11.2007, 02:13
Код

String ScvStringTools::RemoveTag(String sourcestrhtml,String needtags)
{
char* s1;
char* s2;
unsigned int* addrcontrsum;
unsigned int contrsum[1000];
unsigned int addrneedtags[1000];
unsigned int es_,ds_,edi_,ecx_,ecx1,ecx2;
unsigned int esi1,esi2,edi1,edi3,L;
unsigned int koltags;
String tmp = CopyStr(sourcestrhtml);
s1=tmp.c_str();
s2=needtags.c_str();
ecx_=tmp.Length();
addrcontrsum=contrsum;
asm
{
mov es_,es;
mov ds_,ds;
mov es,ds_;
cmp ecx_,0;
jz @g;

cld;



mov esi,s2;
mov ecx,0;
@w1:mov ebx,1;
mov edx,0;
mov eax,0;
mov addrneedtags+ecx*4,esi;

@w:lodsb;
cmp al,';';
jz @n1;
cmp al,0;
jz @n2;
and al,11011111b;
mov ds:[esi-1],al;
mul bl;
add edx,eax;
inc ebx;
jmp @w;
@n1:mov contrsum+ecx*4,edx;
inc ecx;
jmp @w1;
@n2:mov contrsum+ecx*4,edx;
inc ecx;
mov koltags,ecx;



mov esi,s1;
mov edi,esi;
mov ecx,ecx_;
cld;
@1:mov al,'<';
@2:cmp al,ds:[esi];
jz @3;
movsb;
loop @2;
jmp @g;
@3:
mov edi1,edi;
mov esi1,esi;

inc esi;
cmp byte ptr ds:[esi], '/';
jnz @zt;
inc esi;
@zt:

mov edi,0;
mov ebx,1;
mov edx,0;
mov esi2,esi;
@w2:lodsb;
cmp al,' ';
jz @e1;
cmp al,'>';
jz @e1;
cmp al,0;
jz @e1;
inc edx;
and al,11011111b;
mov ds:[esi-1],al;
mul bl;
add edi,eax;
inc ebx;
jmp @w2;
@e1:mov ecx1,ecx;


mov ecx,koltags;
mov eax,edi;
mov edi,koltags;
shl edi,2;
add edi,addrcontrsum;
sub edi,4;
@p1:std;

repnz scasd;
jnz @no1;






mov ecx2,ecx;
mov edi3,edi;

mov esi,esi2;

mov edi,[addrneedtags+ecx*4];

mov ecx,edx;

cld;
repz cmpsb;
mov ecx,ecx2;
mov edi,edi3;


jnz @p1;
jz @v;


@no1:cld;
mov ecx,ecx1;
mov al,'>';
mov edi,esi1;
repnz scasb;
mov esi,edi;
sub edi,esi1;
inc ecx;
sub ecx_,edi;
mov edi,edi1;
jecxz @g;
dec ecx;
jnz @1;
jmp @g;
@v:mov ecx,ecx1;
mov edi,edi1;
mov esi,esi1;
movsb;

dec ecx;
jnz @1;




@g:mov es,es_;
};
tmp.SetLength(ecx_);
return tmp;
}


пользуемся: 
Код

RemoveTag("<html>123<br>123<hr>123","hr;br"); // вернёт "123<BR>123<HR>"
RemoveTag("<html>123<br>123<hr>123",""); // вернёт "123123"



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)