在Scalpel中收集没有IO的数据

时间:2018-02-09 19:46:12

标签: haskell

我使用Haskell的Scalpel library作为Haskell中网络抓取的介绍。我可以调用一个函数scrapeURL,它允许我抓取一个页面并将其输出到IO,但是我找不到一个只允许我简单地返回调用输出的函数。

import Text.HTML.Scalpel

data WikiImg
    =  Src String
    deriving (Show, Eq)

...

rembrantImagesIO :: IO (Maybe [WikiImg])
rembrantImagesIO = scrapeURL "https://en.wikipedia.org/wiki/Rembrandt" wikimgs

rembrantImages :: Maybe [WikiImg]
rembrantImages = scrapeStringLike "https://en.wikipedia.org/wiki/Rembrandt" wikimgs

wikimgs :: Scraper String [WikiImg]
wikimgs = chroots ("div" @: [hasClass "thumbinner"]) wikimg
  where
    wikimg :: Scraper String WikiImg
    wikimg =  do
     src   <- attr "src" $ "img"
     return $ Src src

rembrantImagesIO将输出img src的列表

Just [Src "//upload.wikimedia.org/wikipedia/commons/thumb/a/ae/Rembrandt_-_Rembrandt_and_Saski...

...但rembrantImages似乎失败了。

Just []

如何简单地返回实际返回的Maybe [WikiImg]

(旁注:我对StackOverflow关于Scalpel的看法很少......如果您对Haskell中的网络抓取有经验,请告诉我是否有更好的起点。)

0 个答案:

没有答案