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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.07.2013, 14:17   #1
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию значения из html таблицы (парсинг)

Всем привет!

Ребят помогите с парсингом html таблицы

таблица вида

Цитата:
<td class="Date" width="100" align="right">1.06.2013 16:03</td>
<td class="Stat" width="*">тест</td>
<td class="Stat"width="20" align="center">тест</td>
<td class="Stat" align="center" width="20"><img src="323.png" width="12" height="12" /></td>
</tr><tr>
<td class="DateLight" width="100" align="right">2.06.2013 16:03</td>
<td class="StatusLight" width="*">тест</td>
<td class="StatusLight"width="20" align="center">текст</td>
<td class="StatusLight" align="center" width="20"><img src="232.png" width="12" height="12" /></td>
</tr><tr>
<td class="Date" width="100" align="right">3.06.2013 12:03</td>
<td class="Stat" width="*">тест</td>
<td class="Stat"width="20" align="center">тест</td>
<td class="Stat" align="center" width="20"><img src="323.png" width="12" height="12" /></td>
</tr><tr>
<td class="DateLight" width="100" align="right">3.06.2013 11:03</td>
<td class="StatusLight" width="*">тест</td>
<td class="StatusLight"width="20" align="center">текст</td>
<td class="StatusLight" align="center" width="20"><img src="232.png" width="12" height="12" /></td>
</tr><tr>

получается

дата | текст | текст | картинка
дата | текст | текст | картинка
дата | текст | текст | картинка
дата | текст | текст | картинка

теперь вопрос: как получить все значение DATA, Stat, DateLight, StatusLight, а потом все полученные данные записать но при это чтобы даты и текст совпадали.

заранее спс!!

P.S. это только часть таблицы!
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 13.07.2013, 14:34   #2
Lardes
Форумчанин
 
Аватар для Lardes
 
Регистрация: 19.08.2011
Сообщений: 329
По умолчанию

Регулярными выражениями, Copy, Pos и т.д. В добрый путь
Lardes вне форума Ответить с цитированием
Старый 13.07.2013, 15:32   #3
-glykaman-
Пользователь
 
Аватар для -glykaman-
 
Регистрация: 13.07.2013
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Smagulov85 Посмотреть сообщение
Всем привет!

теперь вопрос: как получить все значение DATA, Stat, DateLight, StatusLight, а потом все полученные данные записать но при это чтобы даты и текст совпадали.
Как раз на сайте неделю назад писал урок по этому:
Как получить исходный код HTML - http://programmerinfo.ru/htmlsrc/
и как вырезать нужную инфу из этого кода - http://programmerinfo.ru/htmlcut/

еще по теме может пригодиться обработка редиректов - http://programmerinfo.ru/htmlred/
Я тебе чем-то помог? Нажми слева на значок весов. Спасибо =)
Мой сайт с видеоуроками по программированию - http://programmerinfo.ru/
-glykaman- вне форума Ответить с цитированием
Старый 13.07.2013, 16:25   #4
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

Цитата:
Сообщение от -glykaman- Посмотреть сообщение
Как раз на сайте неделю назад писал урок по этому:
Как получить исходный код HTML - http://programmerinfo.ru/htmlsrc/
и как вырезать нужную инфу из этого кода - http://programmerinfo.ru/htmlcut/

еще по теме может пригодиться обработка редиректов - http://programmerinfo.ru/htmlred/
да я смотрел и знаю как это делается! я просто не могу понять как сделать так, чтобы мне каждое значение не искать вручную, а чтобы он сам их нашел сколько будет на странице
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 13.07.2013, 16:45   #5
-glykaman-
Пользователь
 
Аватар для -glykaman-
 
Регистрация: 13.07.2013
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Smagulov85 Посмотреть сообщение
да я смотрел и знаю как это делается! я просто не могу понять как сделать так, чтобы мне каждое значение не искать вручную, а чтобы он сам их нашел сколько будет на странице
ну тут тебе поможет множественный поиск.
Алгоритм которого есть тут - http://programmerinfo.ru/searchmemo/

Но его нужно будет немного адаптировать под твои цели. В уроке он по компоненту memo но ничего не мешает тебе загрузить в memo исходный код. и еще там для вбивания элементов поиска используются визуальные компоненты edit тебе же можно будет просто в коде вписать то что нужно искать.

В идеале должна получиться функция которой передается что искать и где и которая находит все элементы с одинаковым текстом и обрабатывает их(так как тебе нужно). Пробуй) если что не получится - код в студию)
Я тебе чем-то помог? Нажми слева на значок весов. Спасибо =)
Мой сайт с видеоуроками по программированию - http://programmerinfo.ru/
-glykaman- вне форума Ответить с цитированием
Старый 13.07.2013, 18:03   #6
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Цитата:
я просто не могу понять как сделать так, чтобы мне каждое значение не искать вручную, а чтобы он сам их нашел сколько будет на страниц
Регулярное выражение наше все.

Вот выражение, которое выбирает все даты:
Код:
align="right">(\d{1,2}.\d{2}.\d{4}\s\d{2}:\d{2})</td>
В совпадениях отсекай align="right"> и </td> и получишь даты. Можно и к этому регулярки применить.
Тоже самое с остальными данными.
Человек_Борща вне форума Ответить с цитированием
Старый 13.07.2013, 21:48   #7
ingushmen
Пользователь
 
Аватар для ingushmen
 
Регистрация: 13.11.2010
Сообщений: 13
По умолчанию

Держи готовый код +

Код:
var
date,t1,t2,img:string;
begin

while Pos('<tr>', html) <> 0 do 
begin

Delete(html, 1, Pos('width="100" align="right">', html) + Length('width="100" align="right">') - 1);
date:=Copy(html, 1, Pos('<', html) - 1);

Delete(html, 1, Pos('StatusLight" width="*">', html) + Length('StatusLight" width="*">') - 1);
t1:=Copy(html, 1, Pos('<', html) - 1);

Delete(html, 1, Pos('StatusLight"width="20" align="center">', html) + Length('StatusLight"width="20" align="center">') - 1);
t1:=Copy(html, 1, Pos('<', html) - 1);

Delete(html, 1, Pos('width="20"><img src="', html) + Length('width="20"><img src="') - 1);
img:=Copy(html, 1, Pos('"', html) - 1);

Memo1.Lines.Add(date+' | '+t1+' | '+t2+' | '+img);

Application.ProcessMessages;
end;

end;
ingushmen вне форума Ответить с цитированием
Старый 14.07.2013, 09:51   #8
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

извените ребят что не ответил были проблемы с инетом!!
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 19.08.2013, 13:20   #9
Smagulov85
Форумчанин
 
Аватар для Smagulov85
 
Регистрация: 22.11.2009
Сообщений: 142
По умолчанию

еще раз всем привет не стал создавать тему еще раз! у меня тут опять проблемы с парсингом таблицы

таблицы вида

<table>
<tr align="center">
<td>текст</td>
<td>текст</td>
<td>текст</td>
<td>текст</td>
</tr>
<tr align="center">
<td>текст</td>
<td>текст</td>
<td>текст</td>
<td>текст</td>
</tr>
<tr align="center">
<td>текст</td>
<td>текст</td>
<td>текст</td>
<td>текст</td>
</tr>
</table>

если парсить выше приведенным способом получается каша, которую не возможно разобрать. так как параметр <td> одинаковый, то, он находить их разу, а это еще маленькая таблица чем больше таблица, то тем больше неразбериха!

как быть?
Если помог: Нажми Весы и оставь отзыв!!!
Smagulov85 вне форума Ответить с цитированием
Старый 19.08.2013, 13:29   #10
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

Код:
function Pars(T_, ForS, _T: string): string;
var
  a, b: integer;
begin
  Result := '';
  if (T_ = '') or (ForS = '') or (_T = '') then
    Exit;
  a := Pos(T_, ForS);
  if a = 0 then
    Exit
  else
    a := a + Length(T_);
  ForS := Copy(ForS, a, Length(ForS) - a + 1);
  b := Pos(_T, ForS);
  if b > 0 then
    Result := Copy(ForS, 1, b - 1);
end;//
//....
result:='';
while pos('</td>',str)>0 do//str=text with table
begin
result:=result+pars('<td>',str,'</td>');
Delete(str, 1, Pos('</td>', str) + Length('</td>') - 1);
end;
showmessage(result);
//Писал на коленке в IDE не проверял.
Кольша вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Парсинг html... kta87 Общие вопросы Delphi 3 06.04.2012 12:13
парсинг HTML Gregor HTML и CSS 0 07.10.2011 09:24
Парсинг HTML russian-stalker Общие вопросы C/C++ 0 18.12.2010 11:25
парсинг Html eldar Общие вопросы Delphi 4 23.04.2009 20:42
HTML Парсинг BaikalLord Помощь студентам 5 15.12.2008 08:20