Как распарсить HTML-страницу и пройти по ссылкам с помощью Ahace Camel? Если кратко-легко! Выполним эту задачу не написав ни одной строчки кода.
На этот раз воспользуемся Spring-DSL, так как в данном случае он более лаконичен.
Для начала необходимо подключить необходимые зависимости
На этот раз воспользуемся 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 относительные.
Удачи!
Комментариев нет:
Отправить комментарий