Networking 如何在Clojure中懒洋洋地阅读网页

Networking 如何在Clojure中懒洋洋地阅读网页,networking,clojure,lazy-evaluation,Networking,Clojure,Lazy Evaluation,我和一个朋友最近在我的Clojure IRC机器人中实现了链接抓取。当它看到一个链接时,它会发出咕噜声并从页面中获取标题。问题是,它必须吞咽整个页面才能抓住链接 在第一次阅读之前,人们如何懒散地阅读页面?使用行顺序,但不要忘记在阅读完成后关闭底层流。我不认为HTML必须以合理的方式拆分成行;不看我们自己后院以外的地方,例如,我相信,Compojure(我想现在是Hiccup)不会费心插入换行符(更新:刚刚检查了Hiccup——没有换行符) 相反,我建议的是在java.io.BufferedInp

我和一个朋友最近在我的Clojure IRC机器人中实现了链接抓取。当它看到一个链接时,它会发出咕噜声并从页面中获取标题。问题是,它必须吞咽整个页面才能抓住链接


在第一次
阅读之前,人们如何懒散地阅读页面?

使用
行顺序
,但不要忘记在阅读完成后关闭底层流。

我不认为HTML必须以合理的方式拆分成行;不看我们自己后院以外的地方,例如,我相信,Compojure(我想现在是Hiccup)不会费心插入换行符(更新:刚刚检查了Hiccup——没有换行符)


相反,我建议的是在
java.io.BufferedInputStream
上进行惰性XML解析(使用
clojure.contrib.lazy XML
),我忘记了第行。谢谢。:)顺便说一句,我几乎不是这方面的专家,但我不相信你可以通过HTTP请求不完整的页面源代码;这其实不是个问题,因为你无论如何也不会得到像图片这样的大东西
slurp*
将在源代码上为您提供
java.io.BufferedReader
,而
c.c.lazy-xml
将做一件对性能可能很重要的事情,那就是不要解析您所寻找的
..
位之外的任何内容。(嗯,我应该把它包括在正确的答案中吗…?也许下次我会,现在我需要休息一下。)有范围标头,但不是所有服务器都支持它。我这样做,其实并不重要。第二行做了我需要的。@Jouni K.Seppänen:啊,对了。谢谢@雷恩:嗯,它不太可能为您带来任何损失(除非您可能需要重新连接一些初始行,这似乎是不必要的工作,而且在面对一些特别难看的html时,它可能有点脆弱,这取决于您如何查找最后一行),但我不确定,如果将它与
c.c.lazy-xml
以及
c.c.io/reader
(在带有open的
中)一起使用,您会得到什么。无论如何,祝你黑客愉快。:-)另一件您不能确定的事情是接收格式良好的XML。我通常在试图将其作为XML处理之前,通过JTidy运行我的“草率HTML”输入文本来解决这个问题。当然,这样做与不阅读整页的目的相冲突;所以我提到这一点只是为了一般利益。