Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Интернет и сети
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 12.08.2012, 21:16
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию Многократный Парсинг Блоков

Использую: TPerlRegEx

Задача: разобрать конечное количество однообразных блоков страницы.

Пример блока:

Код HTML:
<tr class="even"> <td align="right">1</td> <td><a href="/m13/en/1.html">Ajani, Caller of the Pride</a></td> <td>Planeswalker — Ajani (Loyalty: 4)</td> <td>1WW</td> <td>Mythic Rare</td> <td>D. Alexander Gregory</td> <td><img src="http://magiccards.info/images/en.gif" alt="English" width="16" height="11" class="flag2"> Magic 2013</td> </tr>

Код ВСЕЙ страницы получаю по средствам str: = TIdHttp.Get('url.html'); (сомнительно, что это грамотно в этом случае )

Собственно регулярка вот:
Код HTML:
<td><a href="/m13/en/1.html">Ajani, Caller of the Pride</a></td> RegEx.RegEx := '<td><a href="/m13/en/(.*?).html">(.*?)</a></td>';


Вытащить надо естественно каждую колонку ( <td> ... </td> )
Код:
cNum := RegEx.Group[1]; \\ номер элемента
cName := RegEx.Group[2]; \\ имя элемента
Как быть с остльным? cType(Planeswalker ), cSubType(Ajani), cCmC(1WW)

Последний раз редактировалось Uniq!, 12.08.2012 в 21:19.
Ответить с цитированием
  #2  
Старый 12.08.2012, 23:39
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Цитата:
Сообщение от Uniq!
Использую: TPerlRegEx
Задача: разобрать конечное количество однообразных блоков страницы.

А не проще загрузить это дело в любой DOM-парсер и потом просто "пробежаться" по коллекции?
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Uniq! (13.08.2012)
  #3  
Старый 13.08.2012, 08:05
Pyro Pyro вне форума
Так проходящий
 
Регистрация: 18.07.2011
Сообщения: 805
Версия Delphi: 7Lite
Репутация: 6063
По умолчанию

метод scan по всем td, получится список, пройтись циклом
Код:
if (i mod column_count) == 3 then //вроде 4 колонка
//...
__________________
>woweook<
Ответить с цитированием
  #4  
Старый 13.08.2012, 21:42
Аватар для Uniq!
Uniq! Uniq! вне форума
Местный
 
Регистрация: 29.09.2010
Сообщения: 539
Версия Delphi: Delphi XE3
Репутация: 374
По умолчанию

Цитата:
Сообщение от lmikle
А не проще загрузить это дело в любой DOM-парсер и потом просто "пробежаться" по коллекции?

Спасибо за наводочку.
Гугл и вики уже помогли чем смогли. От разнообразия глаза разбежались. Для простотырешения вопроса, посоветуйте? МБ даже есть уже включённый ДОМпарсер в XE2 ?
Ответить с цитированием
  #5  
Старый 13.08.2012, 23:27
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,100
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

MSHTML не подходит?
А если код удовлетворяет спецификации xhtml, то можно просто в TXMLDocument засунуть.
Ответить с цитированием
Этот пользователь сказал Спасибо lmikle за это полезное сообщение:
Uniq! (14.08.2012)
Ответ


Delphi Sources

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

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 01:57.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025