Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
KANSoftWare

"Извлечение данных из таблицы на веб-странице с помощью HtmlP в Delphi"

Delphi , Компоненты и Классы , TParser

Извлечение данных из таблицы на веб-странице с помощью HtmlP в Delphi

Привет, разработчики Delphi! Сегодня мы поговорим о том, как извлечь данные из таблицы на веб-странице с помощью компонента HtmlP в Delphi. Мы рассмотрим пример, в котором нужно извлечь данные из таблицы на странице результатов гонки Formula 1.

Проблема

Пользователь задает вопрос о том, как извлечь данные из таблицы на веб-странице с помощью компонента HtmlP в Delphi. Он уже попробовал использовать HtmlP, но не может понять, как получить фактический текст из элемента.

Контекст

В контексте данной статьи мы будем использовать компонент HtmlP для извлечения данных из таблицы на веб-странице. Мы рассмотрим пример, в котором нужно извлечь данные из таблицы на странице результатов гонки Formula 1, доступной по адресу http://www.gpupdate.net/en/f1-results/8122/first-free-practice-2014-belgian-formula-1-grand-prix/.

Подтвержденный ответ

Прежде всего, давайте рассмотрим код, который поможет нам извлечь данные из таблицы на веб-странице с помощью HtmlP:

procedure GetTable(All: IHtmlElementCollection; Output: TStrings);
var
  el: OleVariant;
  i, tdc, mc: integer;
  v, tst: string;
begin
  v := '';
  mc := 4;
  tdc := 0;
  for i := 0 to All.Length - 1 do
  begin
    el := All.Item(i, '');
    if el.TagName = 'TD' then
    begin
      inc(tdc);
      if tdc > mc then
      begin
        Output.Add(v);
        v := '';
        tdc := 1;
      end;
      if v = '' then
        v := el.InnerText
      else
        v := v + '^' + el.InnerText;
    end;
  end;
end;

procedure ProcessDoc(Doc: IHtmlDocument2; Output: TStrings);
var
  Body: IHtmlElement;
  All: IHtmlElementCollection;
  V: OleVariant;
begin
  Assert(Doc <> Nil);
  Body := Doc.Body;
  Assert(Body <> Nil);
  All := Body.All as IHtmlElementCollection;
  Assert(All <> Nil);
  Assert(All.Length <> 0);
  GetTable(All, Output);
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  V: OleVariant;
begin
  WebBrowser1.Navigate('about:blank'); // Эта строка нужна для того, чтобы у WebBrowser был объект Doc
  Doc := WebBrowser1.Document as IHTMLDocument2;
  V := VarArrayCreate([0, 0], varVariant);
  V[0] := Memo1.Lines.Text;
  try
    Doc.Write(PSafeArray(TVarData(V).VArray));
  finally
    Doc.Close;
  end;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  ProcessDoc(Doc, Memo2.Lines);
end;

Этот код извлекает данные из таблицы на веб-странице с помощью компонента HtmlP и отображает их в Memo2. Чтобы использовать этот код, добавьте на форму два Memo и две кнопки. В первой кнопке (Button1Click) загрузите веб-страницу в объект Doc, а во второй кнопке (Button2Click) вызовите процедуру ProcessDoc, чтобы извлечь данные из таблицы.

Альтернативный ответ

Если вы хотите извлечь данные из таблицы без использования компонента HtmlP, вы можете воспользоваться следующим кодом:

procedure GetTableFromHtml(html: string; Output: TStrings);
var
  pos, pos2, pos3: integer;
  line, line2: string;
begin
  pos := 0;
  while pos <> -1 do
  begin
    pos := Pos('<tr', html);
    if pos <> -1 then
    begin
      pos2 := Pos('</tr>', html, pos);
      line := Copy(html, pos, pos2 - pos + 4);
      pos3 := 0;
      while pos3 <> -1 do
      begin
        pos3 := Pos('<td', line, pos3 + 1);
        if pos3 <> -1 then
        begin
          pos2 := Pos('</td>', line, pos3);
          line2 := Copy(line, pos3, pos2 - pos3 + 4);
          line2 := Delete(line2, 1, 4);
          line2 := Delete(line2, Length(line2), 5);
          Output.Add(line2);
        end;
      end;
    end;
  end;
end;

Эта процедура извлекает данные из таблицы на веб-странице, анализируя HTML-код напрямую. Чтобы использовать этот код, вызовите процедуру GetTableFromHtml, передав ей HTML-код веб-страницы и объект TStrings, в который нужно сохранить извлеченные данные.

Заключение

В этой статье мы рассмотрели два способа извлечения данных из таблицы на веб-странице в Delphi: с помощью компонента HtmlP и без него. Вы можете выбрать тот способ, который лучше всего подходит для вашего проекта. Удачи!

Создано по материалам из источника по ссылке.

Контекст: Статья о том, как извлечь данные из таблицы на веб-странице с помощью компонента HtmlP в Delphi.


Комментарии и вопросы

Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.


:: Главная :: TParser ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-19 13:29:56
2024-10-22 09:41:24/0.0037710666656494/0