Базовые настройки

Нормализация таблиц

Наверное вы уже встречали на страницах таблицы, в которых объединены ячейки или строки в определеном столбце. Это делает таблицу более читабельной для человека и менее читабельной для компьютера. Это достигается использованием таких аттрибутов как rowspan и colspan и очень затрудняет написание универсальной логики для прохода по строкам подобной таблицы.

Для упрощения этой задачи мы ввели специальный параметр normalize_tables, использовав который вы сможете автоматически разъединить все объединенные ячейки и строки, при этом содержимое объединенных ячеек будет продублировано в разъединенных ячейках. Это позволит вам просто проходить построчно по таблице и забирать все данные используя единую логику для любой строки.

Пример использования нормализации таблиц:

              ---
config:
    debug: 2
    agent: Firefox
    # ВКЛЮЧАЕМ АВТОМАТИЧЕСКУЮ НОРМАЛИЗАЦИЮ ТАБЛИЦ
    normalize_tables: yes
do:
- walk:
    to: https://www.diggernaut.com/sandbox/meta-lang-normalize-tables-ru.html
    do:
    - find:
        path: '#table-1'
        do:
    - find:
        path: '#table-2'
        do:
              
              <!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Diggernaut | Мета-язык | Пример использования нормализации таблиц</title>
</head>
<body>

<table id="table-1" width="200" border="1" cellpadding="4" cellspacing="0">
  <tr>
    <td rowspan="2" bgcolor="#FBF0DB">Ячейка 1</td>
    <td>Ячейка 2</td>
  </tr>
  <tr>
    <td>Ячейка 3</td>
  </tr>
</table>

<br/>

<table id="table-2" width="200" border="1" cellpadding="4" cellspacing="0">
  <tr>
    <td colspan="2" bgcolor="#FBF0DB">Ячейка 1</td>
  </tr>
  <tr>
    <td>Ячейка 2</td>
    <td>Ячейка 3</td>
  </tr>
</table>

</body>
</html>
              
Время Уровень Сообщение
2017-10-22 22:53:53:843 info Scrape is done
2017-10-22 22:53:53:836 debug Block content: <tbody>
<tr>
<td colspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
<td colspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
</tr> <tr>
<td>Ячейка 2</td>
<td>Ячейка 3</td>
</tr>
</tbody>
2017-10-22 22:53:53:828 debug Number of found blocks: 1
2017-10-22 22:53:53:821 debug Looking for: #table-2
2017-10-22 22:53:53:814 debug Block content: <tbody>
<tr>
<td rowspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
<td>Ячейка 2</td>
</tr>
<tr>
<td rowspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
<td>Ячейка 3</td>
</tr>
</tbody>
2017-10-22 22:53:53:808 debug Number of found blocks: 1
2017-10-22 22:53:53:801 debug Looking for: #table-1
2017-10-22 22:53:53:790 debug Page content: <!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8"/>
<title>Diggernaut | Мета-язык | Пример использования нормализации таблиц</title>
</head>
<body>
<table id="table-1" width="200" border="1" cellpadding="4" cellspacing="0">
<tbody>
<tr>
<td rowspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
<td>Ячейка 2</td>
</tr>
<tr>
<td rowspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
<td>Ячейка 3</td>
</tr>
</tbody>
</table>
<br/>
<table id="table-2" width="200" border="1" cellpadding="4" cellspacing="0">
<tbody>
<tr>
<td colspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
<td colspan="1" bgcolor="#FBF0DB">Ячейка 1</td>
</tr>
<tr>
<td>Ячейка 2</td>
<td>Ячейка 3</td>
</tr>
</tbody>
</table>
</body>
</html>
2017-10-22 22:53:52:945 info Retrieving page (GET): https://www.diggernaut.com/sandbox/meta-lang-normalize-tables-ru.html
2017-10-22 22:53:52:937 info Starting scrape
2017-10-22 22:53:52:920 debug Setting up default proxy
2017-10-22 22:53:52:906 debug Setting up surf
2017-10-22 22:53:52:880 info Starting digger: meta-lang-normalize-tables [1857]

По умолчанию нормализация таблиц выключена.

Обратите внимение!
Для включения опции необходимо указать значение yes без кавычек.