使用jsoup解析带有clojure的html字符串,源代码如下
依赖项
:dependencies [[org.clojure/clojure "1.10.1"]
[org.jsoup/jsoup "1.13.1"]]
源代码
(require '[clojure.string :as str])
(def HTML (str "<html><head><title>Website title</title></head>
<body><p>Sample paragraph number 1 </p>
<p>Sample paragraph number 2</p>
</body></html>"))
(defn fetch_html [html]
(let [soup (Jsoup/parse html)
titles (.title soup)
paragraphs (.getElementsByTag soup "p")]
{:title titles :paragraph paragraphs}))
(fetch_html HTML)
预期结果
{:title "Website title",
:paragraph ["Sample paragraph number 1"
"Sample paragraph number 2"]}
不幸的是,结果并不像预期的那样
user ==> (fetch_html HTML)
{:title "Website title", :paragraph []}
2条答案
按热度按时间6yt4nkrj1#
我有一个用于tagsoup的clojure Package ,可能有用。请尝试在此模板项目中运行它。要在项目中使用,请添加以下行:
给你的
:dependencies
在project.clj
.代码示例:
细节
如果您查看源代码,就可以很容易地了解为什么要使用 Package 器函数!
crcmnpdw2#
(.getelementsbytag…)返回元素的序列,您需要对每个元素调用.text()方法以获取文本值。我使用的是jsoup1.13.1版。
还可以考虑使用reaver,它是一个 Package jsoup的clojure库,或者像其他人建议的那样使用任何其他 Package 器。