我和一个朋友最近在我的Clojure IRC机器人中实现了链接抓取。当它看到一个链接时,它会读取整个页面并从页面中获取标题。问题是,它必须读取整个页面才能抓取链接。如何才能懒惰地读取页面直到第一个标签呢?
使用 line-seq
,但不要忘记在完成后关闭底层流。
我不会指望 HTML 能够以合理的方式被拆分成行;例如 Compojure(或者目前的 Hiccup,我猜)并不费心插入换行符,我相信(更新: 刚刚检查了 Hiccup -- 没有换行符)。
我建议使用懒惰的 XML 解析(使用 clojure.contrib.lazy-xml
)在 java.io.BufferedInputStream
之上。
slurp*
会为您获取源代码上的java.io.BufferedReader
,而c.c.lazy-xml
将执行可能对性能很重要的一件事情,即不解析超出您要查找的<title>...</title>
部分之外的任何内容。(哦,我应该把这个包含在回答中吗...?也许下次我会,现在得休息一下了。) - Michał Marczykc.c.lazy-xml
加上c.c.io/reader
(在with-open
中)给你带来了什么好处。无论如何,祝你愉快的黑客 :-)。 - Michał Marczyk