2

这可能是一个非常晦涩的案例,但请多多包涵。

我正在编写一个需要下载网页并将其保存到本地磁盘的网络爬虫。同时,作为爬虫,它需要在每个页面上找到超链接并下载这些链接的页面。

现在我正在查看此页面上给出的第一个示例代码。我正在尝试编写这种类型的管道:

processLink :: Conduit S.ByteString IO S.ByteString

然后我将替换示例代码中的这一行:

responseBody res $$+- sinkFile "foo.txt"

用这条线:

responseBody res $= processLinks $$+ sinkFile

所以我要做的是实现一个名为 processLink 的管道,它处理一个 ByteString,从中提取链接,然后将原始 ByteString 传递给 sinkFile 以便可以保存页面。然后我可以递归地调用这些链接上的函数来下载这些链接的页面。

但是,由于 processLink 是一个纯函数,我似乎无法在 processLink 中执行任何 IO 操作,因此无法执行我需要的操作,例如下载这些链接页面。或者我可以吗?我能做些什么来解决这个问题?

4

1 回答 1

4

好吧,我想通了....我想我需要的只是 liftIO 哈哈。抱歉,我对 Haskell 有点陌生:P

于 2013-04-16T07:32:15.957 回答