четверг, августа 30, 2012

Parse HTML-page and follow the link with Apache Camel

Как распарсить HTML-страницу и пройти по ссылкам с помощью Ahace Camel? Если кратко-легко! Выполним эту задачу не написав ни одной строчки кода.
На этот раз воспользуемся Spring-DSL, так как в данном случае он более лаконичен.



Для начала необходимо подключить необходимые зависимости
<dependency>
 <groupId>org.apache.camel</groupId>
 <artifactId>camel-http</artifactId>
 <version>2.9.1</version>
</dependency>
<dependency>
 <groupId>org.apache.camel</groupId>
 <artifactId>camel-tagsoup</artifactId>
 <version>2.9.1</version>
</dependency>

camel-tagsoup необходим для того чтобы распарсить HTML-страницу. Ниже сам маршрут на Spring-DSL выполняющий данную задачу.
<camel:route>
 <camel:from uri="direct:bot" /><!-- В качестве сообщения будет поступать url -->
 <camel:setHeader headerName="original"><!--Сохраним url для дальнейшего использования -->
  <camel:simple>${body}</camel:simple>
 </camel:setHeader>
 <camel:recipientList><!-- Динамически вызовем url -->
  <camel:simple>${body}/b/opp</camel:simple>
 </camel:recipientList>
 <camel:unmarshal>
  <camel:tidyMarkup /><!-- Привести HTML к удобочитаемому виду -->
 </camel:unmarshal>
 <camel:setBody>
  <camel:xpath>//a</camel:xpath><!-- С помощью XPath отбираем только ссылки -->
 </camel:setBody>
 <camel:split>
  <camel:tokenize token="a" xml="true" /><!-- С помощью сплиттера разделяем полученые ссылки -->
  <camel:setHeader headerName="href">
   <camel:xpath>//@href</camel:xpath><!-- Получаем url-ссылки -->
  </camel:setHeader>
  <camel:log message="${in.header.original}${in.header.href}"></camel:log>
  <camel:recipientList>
   <camel:simple>${in.header.original}${in.header.href}</camel:simple><!--Формируем итоговый url и проходим по ссылке -->
  </camel:recipientList>
 </camel:split>
</camel:route>

Само собой ссылки в HTML относительные. Удачи!

Комментариев нет: