RSS

HXTでスクレイピング

ほんとはHaskellでスクレイピングを書きたかったので頑張ってみる。TagSoupは使い方がまだよく理解してないのでHXTで。HXTはStringしか受け付けないのが面倒だな。Data.ByteString.Char でファイルを読み込んでからunpackするのが必要だ。

同じくリンク先にfooが含まれるものの一覧を作成する。

import Text.XML.HXT.Core
import Data.List
import qualified Data.ByteString.Char8 as BSC

main = do
  html <- BSC.readFile "index.html"
  let doc = readString [withParseHTML yes, withWarnings no] (BSC.unpack html)
  links <- runX $ doc //> hasName "a"  >>>  
           hasAttrValue "href" (isInfixOf "foo") >>> 
           getAttrValue "href"
mapM_ putStrLn links