Data Integration — Kettle | Парсинг HTML в 4 шага.

Reading Time: 1 minute

Я вам советую не сильно радоваться в надежде на халявный универсальный способ разбора HTML страниц. Это задача всегда решается под конкретный сайт с использованием разнообразных инструментов. Но да, наша трансформация для разбора HTML страницы действительно будет состоять не больше чем из 4-х шагов.

В данном посте мы рассмотрим два важных вопроса, которые, поверьте мне, очень будут вас выручать.

  1. Использование сторонних библиотек Java в kettle data-integration
  2. Управление потоком данных при помощи кода.

Честно говоря, если бы это было недоступно, то я сомневаюсь, что стал бы вообще использовать kettle data-integration в повседневной жизни.

Приступимс:

Для разбора HTML страницы мы будем использовать стороннюю Java библиотеку Jsoup. Её необходимо скачать и разместить jar файл в директории  \\data-integration\lib . Всё, мы добавили библиотеку и теперь можем её использовать на полную катушку. Да, это так просто и это радует. Только не забудьте перезапустить графическую среду разработки kettle data-intagretion, иначе работать новая библиотека не будет.

Теперь давайте набросаем шаги для нашей трансформации. Она будет выглядеть примерно так:

  1. Получить url страницы (Тут я использовал шаг Generate rows)
  2. Получение html файла (Шаг HTTP client)
  3. Разбор html (Шаг Modified Java Script Value)
  4. Запись данных в файл. (Microsoft Excel Output)
Шаги трансформации

Рис.1- Шаги трансформации.

1. Получить url страницы.

Передавать url для разбора вы можете совершенно любым доступным методом. Нам для демонстрации подойдёт шаг  Generate rows. Его настройка проста и понятна.

Настройки шага Generate Rows

Рис.2 — Настройки шага Generate Rows.

2. Получение html файла.

И опять всё достаточно просто.

Рис.4 - Настройки шага HTTP client.

Рис.3 — Настройки шага HTTP client.

3. Разбор html.

И вот кульминационный и самый сложный момент нашей трансформации.

</p>
<p>//Script here</p>
<p>jsp=org.jsoup.Jsoup;</p>
<p>doc=jsp.parse(html);</p>
<p>// Jsoup позволяет использовать html селекторы. В данном примере в элементе div с классом news-wrapper_ получаем все элементы h3 с классом b-item__title внутри которого находится ссылка(тег «а») с непустым атрибутом «href»<br />
els=doc.select('div.news-wrapper_ h3.b-item__title a[href]');</p>
<p>// Размер полученного массива со ссылками<br />
var l=els.size();</p>
<p>for (var i=0;i&lt;l;i++) {<br />
 //Cоздать новый объект строки.<br />
 var row = createRowCopy(getOutputRowMeta().size());</p>
<p> //Найти индекс первого поля прилагаемой этим шагом<br />
 var idx = getInputRowMeta().size();</p>
<p> // Заполнить каждое поле (обратите внимание, как индекс увеличивается)<br />
 row[idx++]=els.get(i).attr(&quot;href&quot;); // Это поле выходящее поле link так как оно первое<br />
 row[idx++]=els.get(i).text(); // Это выходящее поле name так как оно второе</p>
<p> putRow(row);<br />
}</p>
<p>//Устанавливаем статус у входящей строки,для пропуска,что бы не отправлялась на выход данного шага.<br />
trans_Status = SKIP_TRANSFORMATION;<br />

Возможно вам поможет небольшое графическое описание.

Рис.5 - Пояснение некоторых моментов

Рис.4 — Пояснение некоторых моментов

4. Запись данных в файл.

Как вы будете сохранять результаты, решать вам. Я использую шаг «Microsoft Excel Output» Даже писать про него ни чего не буду т.к. это элементарно.

 


       Пример как обычно по ссылке: htmlParser

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


Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *