【发布时间】:2014-10-28 10:33:43
【问题描述】:
我需要抓取具有以下形式的 html:
<div id='content'>
<h3>Headline1</h3>
<div>Text1</div>
<div>Text2</div>
<div>Text3</div>
<h3>Headline2</h3>
<div>Text4</div>
<div>Text5</div>
<h3>Headline3</h3>
<div>Text6</div>
<div>... and so on ...</div>
</div>
我需要将标题标签之间的内容作为单独的块获取。所以从一个标题到下一个标题。不幸的是,没有所需范围的容器标签。
我尝试了片段选择器{[:h3] [:h3]},但不知何故,这只返回所有h3标签,它们之间没有标签:
(({:tag :h3, :attrs nil, :content ("Headline1")}) ({:tag :h3, :attrs nil, :content ("Headline2")}) ({:tag :h3, :attrs nil, :content ("Headline3")}))
有效的是{[[:h3 (html/nth-of-type 1)]] [[:h3 (html/nth-of-type 2)]]}。这给了我第一个和第二个 h3-tag 之间的所有 html。但是,这并不能通过一个选择器为我提供所有所需的块。
enlive 完全可以做到这一点,还是我应该求助于正则表达式?
谢谢!
【问题讨论】:
-
这个答案有帮助吗?:stackoverflow.com/questions/17157780/range-selectors-in-enlive PS 你不能使用正则表达式来解析 HTML:stackoverflow.com/questions/1732348/… 如果你尝试,你可能会唤醒古老的 ;-)
-
不幸的是,它似乎没有帮助。当我用 {[:h3] [:h3]} 选择时,我只得到 h3 标签,而不是它们之间的节点。
-
如果您添加一个 html sn-p 和您的选择器,我们也许可以编写一个匹配的。如果你包括你现在得到的输出,奖励积分。
-
嗨,我已经用 sn-p 和更详细的描述编辑了帖子。谢谢!