gpt4 book ai didi

clojure - 如何使用 Enlive 从指定标签中抓取数据?

转载 作者:行者123 更新时间:2023-12-02 02:21:45 27 4
gpt4 key购买 nike

有人能解释一下如何从 <td> 中抓取内容吗? <th> 所在的标签具有内容值(实际上在这种情况下我需要 <b> 标签的内容来进行匹配操作)“Row1 title”,但没有抓取 <th>标记(或其任何内容)正在处理中?这是我的测试 HTML:

<table class="table_class"> 
<tbody>
<tr>
<th>
<b>
Row1 title
</b>
</th>
<td>2.660.784</td>
<td>2.944.552</td>
<td>Correct, has 3 td elements</td>
</tr>
<tr>
<th>
Row2 title
</th>
<td>2.660.784</td>
<td>2.944.552</td>
<td>Correct, has 3 td elements</td>
</tr>
</tbody>
</table>

我要提取的数据应该来自这些标签:

                     <td>2.660.784</td> 
<td>2.944.552</td>
<td>Correct, has 3 td elements</td>

我已经设法创建返回表的全部内容的函数,但我想排除 <th>结果中的节点,并仅返回来自 <td> 的数据节点,我可以使用哪些内容进行进一步的解析。谁能帮我解决这个问题?

最佳答案

像这样激活

(ns tutorial.so-scrape
(:require [net.cgrand.enlive-html :as html])

(defn parse-tds [url]
(html/select (html/html-resource (java.net.URL. url)) [:table :td]))

应该给你所有 td 节点的序列,某种形式的 {:tag :td :attrs {...} :content (...)}。我不知道 enlive 让您可以直接获取这些节点的内容。我可能是错的。

然后您可以提取序列的内容以获取类似
的内容(for [line ws-content] (apply str (:content line)))

关于 question you posted yesterday (我假设您仍在使用该页面)——我提供的解决方案有点复杂——但它也很灵活。例如,如果您像这样更改 tag-type 函数

(defn tag-type [node]
(case (:tag node)
:td ::TerminalNode
::IgnoreNode)

(将所有节点的返回值更改为 ::IgnoreNode 除了 :td 然后它只为您提供 :td 内容的序列这可能接近您想要的。如果您需要更多帮助,请告诉我。

编辑(回复下面的评论)我不认为单独使用 enlive 可以根据节点的 :content 选择节点 - 但您当然可以使用 Clojure 这样做。

例如你可以做类似的事情

(for [line ws-content :when (re-find (re-pattern "WHAT YOU WANT TO MATCH") (:content line))]
(:content line))

可以工作。 (您可能需要稍微调整 (:content line) 形式..

关于clojure - 如何使用 Enlive 从指定标签中抓取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7815260/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com