С оживлением что-то вроде этого
(ns tutorial.so-scrape
(:require [net.cgrand.enlive-html :as html])
(defn parse-tds [url]
(html/select (html/html-resource (java.net.URL. url)) [:table :td]))
должен дать вам последовательность всех td
узлов, что-то вроде {:tag :td :attrs {...} :content (...)}
. Я не знаю, чтоivelive дает вам возможность получать содержимое этих узлов напрямую. Я могу ошибаться.
Затем вы можете извлечь содержимое последовательности для чего-то вроде
(for [line ws-content] (apply str (:content line)))
Относительно вопроса , который вы отправили вчера (я полагаю, вы все еще работаете с этой страницей) - решение, которое я там дал, было немного сложным - но оно также и гибкое. Например, если вы измените функцию tag-type
следующим образом
(defn tag-type [node]
(case (:tag node)
:td ::TerminalNode
::IgnoreNode)
(измените возвращаемое значение всех узлов на ::IgnoreNode
, за исключением :td
, тогда он просто дает вам последовательность содержимого :td
s, которое, вероятно, близко к тому, что вы хотите. Дайте мне знать, если вы нужна дополнительная помощь.
РЕДАКТИРОВАТЬ (в ответ на комментарии ниже)
Я не думаю, что выбор узлов на основе их :content
возможен только с помощью liveive, но вы, безусловно, можете сделать это с Clojure.
например, вы можете сделать что-то вроде
(for [line ws-content :when (re-find (re-pattern "WHAT YOU WANT TO MATCH") (:content line))]
(:content line))
может работать. (возможно, вам придется немного подправить форму (:content line)
..