Загрузка HTML-таблиц в память и вывод данных в нужном формате (макросы шаблона вывода: [LOADHTMLTABLE], [GETTDATA], [REBUILD])

Содержание страницы

1) Загрузка HTML-таблиц в память (создаем массив ячеек таблицы в памяти программы с указанным именем [LOADHTMLTABLE(имя)]код HTML-таблицы[/LOADHTMLTABLE]);
2) Вывод содержимого указанных ячеек HTML-таблицы ([GETTDATA(имя таблицы|Y|X)], где Y — номер ряда, X — номер столбца);
3) Вывод данных всей таблицы в нужном формате ([REBUILD(имя таблицы)][JUNCTION][/REBUILD]).


1) Загрузка HTML-таблиц в память

Для работы с данными HTML-таблиц их сначала нужно загрузить в память программы. Для этого достаточно поместить код нужной HTML-таблицы в специальный макрос шаблона вывода:

1
2
3
4
5
[LOADHTMLTABLE(имя)]<table>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</table>[/LOADHTMLTABLE]

При этом произойдет загрузка таблицы в массив данных в память программы. Каждая ячейка загружаемой таблицы попадет в соответствующий ее координатам элемент создаваемого массива:

1
2
3
1 2 3
4 5 6
7 8 9

Макрос [LOADHTMLTABLE] можно вызывать сколько угодно раз в пределах парсинга каждого WEB-документа и создавать массивы данных таблиц с разными именами.

Если вызвать макрос с одним и тем же именем два и более раза, то данные таблиц будут объединяться:

1
2
3
4
5
6
7
8
9
10
11
12
13
[LOADHTMLTABLE(имя)]
<table>
<tr><td>1</td><td>2</td><td>3</td></tr>
<tr><td>4</td><td>5</td><td>6</td></tr>
<tr><td>7</td><td>8</td><td>9</td></tr>
</table>
[/LOADHTMLTABLE][LOADHTMLTABLE(имя)]
<table>
<tr><td>10</td><td>11</td><td>12</td></tr>
<tr><td>13</td><td>14</td><td>15</td></tr>
<tr><td>16</td><td>17</td><td>18</td></tr>
</table>
[/LOADHTMLTABLE]

В итоге получим массив данных из двух таблиц, в котором сначала будут идти элементы HTML-таблицы 1, а под ними будут располагаться элементы HTML-таблицы 2:

1
2
3
4
5
6
1 2 3
4 5 6
7 8 9
10 11 12
13 14 15
16 17 18

Если HTML-теги загружаемой таблицы имеют атрибуты rowspan, colspan (таблица содержит объединенные ячейки), то используйте макрос [APPLYTABLESPANS] (этот макрос размножит объединенные ячейки HTML-таблицы, расположите его внутри макроса [LOADHTMLTABLE]):

1
[LOADHTMLTABLE(1)][APPLYTABLESPANS][FIX]код HTML-таблицы[/APPLYTABLESPANS][/LOADHTMLTABLE]

Если нужно применить функции поиск-замены к данным КАЖДОЙ ячейки загружаемой HTML-таблицы, используйте макрос [CREPLACE] (этот макрос поиск-замены работает только внутри макроса [LOADHTMLTABLE]):

1
2
[LOADHTMLTABLE(имя)][CREPLACE]что заменить 1|на что заменить 1{break}что заменить 2|на что заменить 2{break}что заменить 3|на что заменить 3{break}...[/CREPLACE]
код HTML-таблицы[/LOADHTMLTABLE]

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

1
2
[LOADHTMLTABLE(имя)][CREPLACE]<{skip}>|{break}{br}|[/CREPLACE]
код HTML-таблицы[/LOADHTMLTABLE]


2) Вывод содержимого указанных ячеек HTML-таблицы

После того, как загрузили данные HTML-таблицы в массив, можно выводить любой элемент массива макросом шаблона вывода [GETTDATA]:

1
2
[LOADHTMLTABLE(имя)]код HTML-таблицы[/LOADHTMLTABLE]
[GETTDATA(имя|Y|X)]

Где Y — номер ряда массива, X — номер ячейки

3) Вывод данных всей таблицы в нужном формате

Для вывода данных загруженной таблицы пользуйтесь макросом [REBUILD]:

1
[LOADHTMLTABLE(имя)]код HTML-таблицы[/LOADHTMLTABLE][REBUILD(имя)][JUNCTION][/REBUILD]

При выводе данных поочередно берутся элементы массива таблицы из памяти и вставляются в результат через разделители. Все, что находится между [REBUILD(имя)] и [/REBUILD] (за исключением параметров) является шаблоном выходных данных, а оператор [JUNCTION] выводит значение элемента массива на пересечении текущих Y и X (текст текущей ячейки таблицы).

Помимо оператора [JUNCTION] в шаблоне выходных данных может быть любой текст или макросы шаблона вывода.

Для вывода номера ряда (в шаблон выходных данных) вставляется оператор [X], а для вывода номера столбца — оператор [Y].

Для вывода названия столбцов таблицы (ячейки первого ряда) в шаблон выходных данных вставляется оператор [HTITLE], а для вывода названия рядов таблицы (если «шапка» таблицы расположена вертикально слева) используется оператор [VTITLE].

Для указания разделителей ячеек (друг от друга) и рядов ячеек (друг от друга) пользуйтесь параметром [SEP] (параметр указывается внутри макроса [REBUILD]):

1
[LOADHTMLTABLE(имя)]код HTML-таблицы[/LOADHTMLTABLE][REBUILD(имя)][SEP]разделитель ячеек в ряде[ROWSEP]разделитель рядов ячеек[/SEP][JUNCTION][/REBUILD]

Если в качестве разделителей указать [CSVCS] и [CSVLB], то результат примет вид таблицы CSV:

1
[LOADHTMLTABLE(имя)]код HTML-таблицы[/LOADHTMLTABLE][REBUILD(имя)][SEP][CSVCS][ROWSEP][CSVLB][/SEP][JUNCTION][/REBUILD]

Для того, чтобы при выводе данных пропускать определенное количество рядов или столбцов исходной HTML-таблицы используйте параметры [STARTROW]N[/STARTROW][STARTCOLUMN]N[/STARTCOLUMN], где N является номером начального ряда или столбца.

Также можно использовать шаблон ряда ячеек [ROWTEMPLATE][ROWTEXT][/ROWTEMPLATE], где помимо [ROWTEXT] (является оператором вывода данных ряда) могут быть любые другие макросы шаблона вывода, например, [ROWTEMPLATE]<CD_GRAN_1!>[CSVCS]<CD_GRAN_2!>[ROWTEXT][CSVCS][/ROWTEMPLATE].

Наличие параметра [ROTATE] повернет таблицу на 90 градусов.

Параметр [CHECKJUNCTION] является фильтром для каждой ячейки, отправляемой на построение результата. Если ячейка не пройдет фильтр, то в результат попадет пустой текст (используйте параметр [DONOTADDEMPTYDATA], чтобы в результат не попадали пустые ячейки):

1
[REBUILD(имя)][DONOTADDEMPTYDATA][CHECKJUNCTION]фильтр[/CHECKJUNCTION][JUNCTION][/REBUILD]

Примеры фильтров [CHECKJUNCTION]:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[HASENTRY]подстрока[/HASENTRY] - проверит наличие "подстрока" в тексте добавляемой в результат ячейки (если подстрока содержится в тексте ячейки, ячейка попадет в результат)
[HASNOTENTRY]подстрока[/HASNOTENTRY] - проверит отсутствие "подстрока" в тексте добавляемой в результат ячейки (если подстрока содержится в тексте ячейки, ячейка НЕ попадет в результат)
 
Возможны сочетания:
([HASENTRY]подстрока 1[/HASENTRY] or [HASENTRY]подстрока 2[/HASENTRY]) and [HASNOTENTRY]подстрока 3[/HASNOTENTRY]
 
Также возможны операции сравнения чисел:
([JUNCTIONASREAL]>100) and ([JUNCTIONASREAL]<200)
Где [JUNCTIONASREAL] - выводит число из содержимого проверяемой ячейки. Обратите внимание на наличие скобок!
 
Еще возможно создать фильтр по длине содержимого ячеек:
[TEXTLENGTH][JUNCTION][/TEXTLENGTH]>100
Где [JUNCTION] - выводит текст ячейки, а [TEXTLENGTH] берет его длину
 
Для сравнения текста ячеек используйте операторы [TEXT]:
[TEXT][JUNCTION][/TEXT]=[TEXT]aaa[/TEXT]
[TEXT][JUNCTION][/TEXT]<>[TEXT]aaa[/TEXT]

Вывод только первого столбца таблицы:

1
[LOADHTMLTABLE(1)][CREPLACE]<{skip}>|[/CREPLACE]HTML-КОД ТАБЛИЦЫ[/LOADHTMLTABLE][REBUILD(1)][STARTROW]2[/STARTROW][DONOTADDEMPTYDATA][ROWTEMPLATE]данные 1[CSVCS][ROWTEXT][CSVCS]данные2[CSVCS]...[/ROWTEMPLATE][SEP][CSVCS][ROWSEP][CSVLB][/SEP][JUNCTION][CHECKJUNCTION][X]=1[/CHECKJUNCTION][/REBUILD]

Где в [CHECKJUNCTION][X]=1[/CHECKJUNCTION] проверяется номер столбца ([X] должен быть равен 1)

А если нужно выводить еще какой-нибудь столбец таблицы (помимо первого), например второй, то используйте следующую конструкцию:

1
[LOADHTMLTABLE(1)][CREPLACE]<{skip}>|[/CREPLACE]HTML-КОД ТАБЛИЦЫ[/LOADHTMLTABLE][REBUILD(1)][STARTROW]2[/STARTROW][DONOTADDEMPTYDATA][ROWTEMPLATE]данные 1[CSVCS][ROWTEXT][CSVCS][GETTDATA(1|[Y]|2)][CSVCS]...[/ROWTEMPLATE][SEP][CSVCS][ROWSEP][CSVLB][/SEP][JUNCTION][CHECKJUNCTION][X]=1[/CHECKJUNCTION][/REBUILD]

Добавить второй столбец в шаблон ряда: [GETTDATA(1|[Y]|2)]

Макросы шаблона вывода

Content Downloader


Пример обработки таблицы с цветами ,размерами и их наличием (YES/NO):

Допустим, есть HTML-таблица вида:

Где наличия товары в наличии обозначены, как YES

И нам нужно из нее получить CSV-данные вида:

То есть, оставить только размеры тех товаров, которые есть в наличии.

Тогда поступаем следующим образом (вставить этот код в шаблон вывода):

1
[LOADHTMLTABLE(1)]<table><thead><tr><td>Name</td><th>42</th><th>44</th><th>46</th><th>48</th><th>50</th><th>52</th></tr></thead><tboby><tr><td>'белый'</td><td>NO</td><td>YES</td><td>YES</td><td>YES</td><td>NO</td><td>NO</td></tr></td><td><tr><td>'бирюза'</td><td>NO</td><td>YES</td><td>YES</td><td>NO</td><td>NO</td><td>NO</td></tr></td><td><tr><td>'зеленый'</td><td>NO</td><td>YES</td><td>NO</td><td>NO</td><td>NO</td><td>NO</td></tr></td><td><tr><td>'красный'</td><td>NO</td><td>NO</td><td>NO</td><td>NO</td><td>NO</td><td>NO</td></tr></td><td><tr><td>'темно-синий'</td><td>NO</td><td>NO</td><td>NO</td><td>NO</td><td>NO</td><td>NO</td></tr></td><td><tr><td>'черный'</td><td>NO</td><td>YES</td><td>YES</td><td>NO</td><td>NO</td><td>NO</td></tr></tboby></table>[/LOADHTMLTABLE][REBUILD(1)][DONOTADDEMPTYDATA][ROWTEMPLATE][VTITLE][CSVCS][ROWTEXT][/ROWTEMPLATE][SEP],[ROWSEP][CSVLB][/SEP][HTITLE][CHECKJUNCTION][HASENTRY]YES[/HASENTRY][/CHECKJUNCTION][/REBUILD]

Некоторые пояснения:




Спасибо за внимание!

1 Star2 Stars3 Stars4 Stars5 Stars (оценок: 1, средний балл: 5,00)
Загрузка...
Автор: admin, 5 декабря 2016
Рубрики: Функции обработки
Метки: , , , , ,

Последние статьи

css.php