Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.09.2011, 08:28   #1
leonbratsk
Новичок
Джуниор
 
Регистрация: 27.11.2010
Сообщений: 2
По умолчанию Просмотр обычного текста старницы

Столкнулся с проблемой, что нужно вытащит просто текст без кодов, фреймов и т.д из страницы.
Везде пишут про HTML код, но он как раз не нужен.
Прошу помощи. Работаю с Indy.
leonbratsk вне форума Ответить с цитированием
Старый 17.09.2011, 09:03   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
но он как раз не нужен.
ИМХО, грузить страницу в WebBrowser, а потом через innerText получать только текст...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 17.09.2011, 22:11   #3
kangreon
Форумчанин
 
Аватар для kangreon
 
Регистрация: 03.04.2009
Сообщений: 305
По умолчанию

Если страница составлена правильно, можно попробовать спарсить все между тегами. Вот пример парсера текста из HTML страницы. В нем есть одна проблема - слишком много ненужных знаков переноса получается на выходе.
Код:
function TForm1.ClearHTML(const sIn: string): string;
var
  i, iC: Integer;
  s, tag: string;
  noCopy: Boolean;
begin
  iC := 1;
  i := 1;
  noCopy := False;

  while PosEx('<', sIn, i) <> 0 do
  begin
    i := PosEx('<', sIn, i);

    // Копирование текста между тегами
    s := s + Copy(sIn, iC, i - iC);

    // копирование следующего тега
    tag := Copy(sIn, i + 1, 5);

    if tag = 'scrip' then
    begin
      i := PosEx('</script', sIn, i) + 1;
      if i = 1 then
      begin
        noCopy := True;
        Break;
      end;

      i := PosEx('>', sIn, i) + 1;
      if i = 1 then
      begin
        noCopy := True;
        Break;
      end;
    end
    else if tag = 'style' then
    begin
      i := PosEx('</style', sIn, i);
      if i = 0 then
      begin
        noCopy := True;
        Break;
      end;

      i := PosEx('>', sIn, i) + 1;
      if i = 1 then
      begin
        noCopy := True;
        Break;
      end;
    end
    else
    begin
      i := PosEx('>', sIn, i) + 1;
      if i = 1 then
      begin
        noCopy := True;
        Break;
      end;
    end;
    iC := i;
  end;

  // копирование текста до конца
  if not noCopy then
    s := s + Copy(sIn, iC, Length(sIn));

  Result := s;
end;
kangreon вне форума Ответить с цитированием
Старый 18.09.2011, 03:23   #4
Lesha
Форумчанин
 
Аватар для Lesha
 
Регистрация: 30.01.2009
Сообщений: 418
По умолчанию

TWebBrowser событие OnDocumentComplete

и выводим текст через конструкцию

var s: string;
s:=(WebBrowser1.Document as IHTMLDocument2).Body.InnerText;

и далее уже работаем со сторокой s;
Lesha вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Движение обычного круга по осям стрелками клавиатуры. mitmikha Паскаль, Turbo Pascal, PascalABC.NET 2 18.04.2011 08:39
Почему inc работает быстрее обычного сложения Rusl92 Паскаль, Turbo Pascal, PascalABC.NET 9 26.04.2010 11:58
подскажите WYSIWYG editor взамен обычного Memo mosq Компоненты Delphi 1 09.09.2009 14:07
Почему двоеточие и тире отображается выше обычного? Сергей Орлов Microsoft Office Word 1 10.07.2009 00:53
из Обычного в Процеду pavel42 Паскаль, Turbo Pascal, PascalABC.NET 5 27.04.2009 16:33