enlive
의 html-resource
출력을 저장하고 다시로드하는 데 적합한 json 방법은 무엇입니까? clojure.data.json 쓰기/읽기가 큰 데이터에 영향을 미침
(require net.cgrand.enlive-html :as html)
(require clojure.data.json :as json)
(def craig-home
(html/html-resource (java.net.URL. "http://www.craigslist.org/about/sites")))
(spit "./data/test_json_flow.json" (json/write-str craig-home))
(def craig-reloaded
(json/read-str (slurp "./data/test_json_flow.json") :key-fn keyword))
(defn count-nodes [page] (count (html/select page [:div.box :h4])))
(println (count-nodes craig-home)) ;; => 140
(println (count-nodes craig-reloaded)) ;; => 0
감사합니다.
UPDATE
작성하는 것 html/select
대신 html/html-resource
(def craig-home
(html/html-resource (java.net.URL. "http://www.craigslist.org/about/sites")))
(def craig-boxes (html/select craig-home [:div.box]))
(count (html/select craig-boxes [:h4])) ;; => 140
(spit "./data/test_json_flow.json" (json/write-str craig-boxes))
(def craig-boxes-reloaded
(json/read-str (slurp "./data/test_json_flow.json") :key-fn keyword))
(count (html/select craig-boxes-reloaded [:h4])) ;; => 0
이 잘하지 않는 것, 당신은 크레이그-다시로드와 크레이그 - 집으로 돌아된다 다른 유형, 다시로드 된 버전은 html을 반환하지 않습니다 count-nodes 방법을 사용할 수 있습니까? –
@mark 당신이 옳습니다. 나는 나의 예증을 망 쳤다. 사실 제 질문은'html/select' 결과를 jsonizing하고 더 파싱하는 것이 었습니다. 나는 예제를 업데이 트 – user3639782