Как получить значение атрибута href, используя ive
Я новичок в Clojure и живой.
У меня есть HTML, как это
<SPAN CLASS="f10"><A HREF="value1" title="...." TARGET="detail">....</A></SPAN></DIV><DIV CLASS="p5"><SPAN CLASS="f10"><A HREF="value2" title="..." TARGET="detail">.....</A></SPAN>
Я пробовал это
(html / select (fetch-url base-url) [: span.f10 [: a (html / attr?: href)]])))
но это возвращает
({:tag :a,
:attrs
{:target "detail",
:title
"...",
:href
"value1"},
:content ("....")}
{:tag :a,
:attrs
{:target "detail",
:title
"....",
:href
"value2"},
:content
("....")}
То, что я хочу, это просто значение 1 и значение 2 на выходе. Как я могу это сделать?
2 ответа
Решение
select
возвращает совпадающие узлы, но вам все равно нужно извлечь их href
атрибутов. Для этого вы можете использовать attr-values
:
(mapcat #(html/attr-values % :href)
(html/select (html/html-resource "sample.html") [:span.f10 (html/attr? :href)]))
Я использую эту маленькую функцию, потому что Enlive attr
функции не возвращают значения. Вы просто ходите по хешу, чтобы получить значение.
user=> (def data {:tag :a, :attrs {:target "detail", :title "...", :href "value1"}})
#'user/data
user=> (defn- get-attr [node attr]
#_=> (some-> node :attrs attr))
#'user/get-attr
user=> (get-attr data :href)
"value1"