Clojure 如何在enlive中解析来自httpclient的结果

Clojure 如何在enlive中解析来自httpclient的结果,clojure,enlive,Clojure,Enlive,在下面的链接中 它显示了如何从URL解析页面,但我需要使用sock5代理,我不知道如何在enlive中使用代理,但我知道如何在httpclient中使用代理,但如何解析httpclient的结果,我有以下代码,但最后一行显示空结果 (:require [clojure.set :as set] [clj-http.client :as client] [clj-http.conn-mgr :as conn-mgr]

在下面的链接中

它显示了如何从URL解析页面,但我需要使用sock5代理,我不知道如何在enlive中使用代理,但我知道如何在httpclient中使用代理,但如何解析httpclient的结果,我有以下代码,但最后一行显示空结果

    (:require [clojure.set :as set]
                [clj-http.client :as client]
                [clj-http.conn-mgr :as conn-mgr]
                [clj-time.core :as time]
                [jsoup.soup :as soup]
                [clj-time.coerce :as tc]
                [net.cgrand.enlive-html :as html]
                )     
     (def a (client/get "https://news.ycombinator.com/"
                             {:connection-manager (conn-mgr/make-socks-proxied-conn-manager "127.0.0.1" 9150)
                              :socket-timeout 10000 :conn-timeout 10000
                              :client-params {"http.useragent" "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.20 (KHTML, like Gecko) Chrome/11.0.672.2 Safari/534.20"}}))
(def b (html/html-resource a))
(html/select b [:td.title :a])

使用enlive时,
html资源
fn从URL执行提取,然后将其转换为可以解析的数据结构。当您向它传递一个已经完成的请求时,它似乎只是返回请求,而不是抛出错误

无论哪种方式,您需要的函数都是
html snippet
,您需要将其传递到请求的正文中。像这样:

;; Does not matter if you are using a connection manager or not as long as
;; its returning a result with a body
(def req (client/get "https://news.ycombinator.com/"))

(def body (:body req))
(def nodes (html/html-snippet body))
(html/select nodes [:td.title :a])

;; Or you can put it all together like this

(-> req
    :body 
    html/html-snippet
    (html/select [:td.title :a])))