我正在尝试使用基于表格的布局从页面中抓取一些数据。因此,为了获得一些数据,我需要在第一个表内第五个表内的第二个表内获得第三个表。我试图使用enlive,但无法弄清楚如何使用nth-of-type和其他选择器步骤。更糟糕的是,有问题的页面在正文中有一个顶级表,但是(select data [:body:>:table])由于某种原因返回6个结果。我到底做错了什么?
答案 0 :(得分:7)
对于nth-of-type
,以下示例是否有帮助?
user> (require '[net.cgrand.enlive-html :as html])
user> (def test-html
"<html><head></head><body><p>first</p><p>second</p><p>third</p></body></html>")
#'user/test-html
user> (html/select (html/html-resource (java.io.StringReader. test-html))
[[:p (html/nth-of-type 2)]])
({:tag :p, :attrs nil, :content ["second"]})
不知道第二个问题。你的方法似乎适用于天真的测试:
user> (def test-html "<html><head></head><body><div><p>in div</p></div><p>not in div</p></body></html>")
#'user/test-html
user> (html/select (html/html-resource (java.io.StringReader. test-html)) [:body :> :p])
({:tag :p, :attrs nil, :content ["not in div"]})
有机会查看您的实际HTML吗?
更新: (回应评论)
这是另一个例子,其中“返回的<p>
里面的第二个<div>
内的任何一个<div>
”:
user> (def test-html "<html><head></head><body><div><p>this is not the one</p><p>nor this</p><div><p>or for that matter this</p><p>skip this one too</p></div></div><span><p>definitely not this one</p></span><div><p>not this one</p><p>not this one either</p><div><p>not this one, but almost</p><p>this one</p></div></div><p>certainly not this one</p></body></html>")
#'user/test-html
user> (html/select (html/html-resource (java.io.StringReader. test-html))
[[:div (html/nth-of-type 2)] :> :div :> [:p (html/nth-of-type 2)]])
({:tag :p, :attrs nil, :content ["this one"]})